[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/04 11:41 / Filesize : 289 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

152 名前:150 [2007/06/15(金) 16:26:32 ]
Excel2007です。
>>151
サンクスです。

でじつは、Rangeオブジェクトを for で回そうと、

Dim StartCell As Range, LastCell As Range
Set StartCell = ActiveSheet.Range("テーブル[列]").Offset(0, 0)
Set LastCell = ActiveSheet.Range("テーブル[列]").End(xlDown)

' 資産に関連するもの更新
For i = StartCell.Row To LastCell.Row
   CalculateTable (ActiveSheet.Cells(i, 4))
Next i

としていたのですが、もっと簡単な書き方はないでしょうか?

Dim Cell As Range
For Each Cell In ActiveSheet.Range("テーブル[列]")
   CalculateTable (Cell)
Next
とすると、 CalculateTable (Cell) で、オブジェクトが必要です、と怒られてしまいます。 orz


153 名前:150 [2007/06/15(金) 16:30:12 ]
>>152
うああああ、
   CalculateTable (Cell)
じゃなくて、
   CalculateTable Cell
にしたら、エラーでなくなった orz
マジVBAわかんねえええええ。

なんだこら

154 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:37:34 ]
関数単体で引数()でくくるとなりますね

155 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 21:01:14 ]
たぶん配列とまぎらわしいからだろ

156 名前:初心者 [2007/06/17(日) 13:50:18 ]
はじめまして、VBAをやり始めたばっかりで全然わからないので教えて下さい。

(1)1+2+3+…+10を計算する
(2)1+3+5+…+19を計算する
(3)1+4+9+…+100を計算する
と言う問題で以下の空欄にあてはめるものを答える問題です。

Sub ex()
Dim x As Integer, sum As Integer
sum = 0
For x = 1 To 10
(空欄)
  Next x
Msgbox "合計=" & sum
End Sub

長々とすみません。よろしくお願いします。

157 名前:デフォルトの名無しさん [2007/06/17(日) 13:58:01 ]
>>156
宿題だとばれると教えてもらえないから、もう少し、利き方変えた方がいいぞ

あと「よろしくお願いします」って、お前他力本願スギ。
どこが、わからなくて、どこで詰まっているかを質問しよう。

158 名前:デフォルトの名無しさん [2007/06/17(日) 14:01:01 ]
(1) sum = sum + x
(2) sum = sum + (2*x -1)
(3) は自分で考えろ馬鹿

159 名前:初心者 [2007/06/17(日) 15:52:53 ]
すいません。(3)がわかりません

160 名前:デフォルトの名無しさん [2007/06/17(日) 16:36:26 ]
sum = sum + (5*x -1)



161 名前:初心者 [2007/06/17(日) 17:02:14 ]
なぜそうなるのでしょうか?

162 名前:デフォルトの名無しさん [2007/06/17(日) 17:12:23 ]
>>160
ワロタ

163 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:48:13 ]
>>161
悪いことは言わん。
算数からやり直せ。

164 名前:デフォルトの名無しさん [2007/06/17(日) 18:14:15 ]
なんでまたVBAのスレに質問してくるの?
VBAどころか、ただのアルゴリズム…いや、算数か。の問題だろ。

法則を考えろよ…。

165 名前:デフォルトの名無しさん [2007/06/17(日) 18:27:48 ]
言っておくけど160のは違うぞ。

ヒント。
sum=1+4+9+16+25+36+49+64+81+100
これで分からなければ終わってる。

166 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:41:58 ]
気がつかなかった俺オワタw

167 名前:デフォルトの名無しさん [2007/06/17(日) 18:46:23 ]
わからない。答え教えてもらえないですか?

168 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:56:47 ]
(3)は
sum=sum+(x*x)


169 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:57:32 ]
>>156
(2)
For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For

(3)
Select Case x
Case 1: sum = sum + 1
Case 2: sum = sum + 4
Case 3: sum = sum + 9
Case 4: sum = sum + 16
Case 5: sum = sum + 25
Case 6: sum = sum + 36
Case 7: sum = sum + 49
Case 8: sum = sum + 64
Case 9: sum = sum + 81
Case 10: sum = sum + 100
End Select

これでいーだろ







まじめに(3)のヒントだすなら「^2」


170 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:06:07 ]
コーディングより1+4+9+…+100が全くわからなかった。
オワテルwww



171 名前:デフォルトの名無しさん [2007/06/17(日) 19:30:52 ]
をいをい…。

つうか>>156、その問題は学校の問題か?職場の問題か?

172 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:30:10 ]
>>169
ヒント:「For x = 1 To 10」部分は固定

173 名前:169 mailto:sage [2007/06/17(日) 21:01:49 ]
>>172
ん?
(2)のことならxでループさせてないんだけど?
試してないからわからんけど、ネストされたForで答えでない?

意味取り違えてたら堪忍

174 名前:初心者 [2007/06/17(日) 21:49:26 ]
2乗はどうあらわしたらいいのですか?

175 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:55:05 ]
>>174
>>169

176 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 23:10:44 ]
>>173
Sub ex()
Dim x As Integer, sum As Integer
sum = 0
For x = 1 To 10
(空欄)
  Next x
Msgbox "合計=" & sum
End Sub

の中で変えて良いのは(空欄)の部分だけ
単に(1)(2)(3)の計算ルーチンを作れば良いだけではなく
1 To 10のxのループを使った上で解かなければならないという条件

177 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 00:10:28 ]
偉そうに答えてる人の方がネタに見える…
(1) sum = x + sum
(2) sum = x * 2 - 1 + sum
(3) sum = x ^ 2 + sum


178 名前:デフォルトの名無しさん [2007/06/18(月) 00:55:34 ]
>>177

ありがとうございました!独学なんで分からないところがたくさんですm(__)m

179 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 01:03:28 ]
>>178
Excelより先に算数の勉強をし直した方が良いぞ。

180 名前:169 mailto:sage [2007/06/18(月) 01:14:50 ]
>>176
あ〜ごめん
xを必ずループさせろとは書いてなかったから

ちなみに
俺が書いた(2)が空欄に入れるものだってわかってるよね?
sum = 0
For x = 1 To 10
For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For
Next x
Msgbox "合計=" & sum
End Sub
ってことね

答えが先にかかれてたからふざけてみたんだけど
ふざけすぎたかw
普通なら当然>>177だわなw




181 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 04:00:12 ]
ネタなのはわかるがiはどこから出てきたんだw

182 名前:デフォルトの名無しさん [2007/06/18(月) 16:22:16 ]
EXCEL2003です。
半角アルファベット文字列の先頭だけ大文字にしたいのですが、
適切なものが見つかりません。

ググってProperを見つけましたが、これは先頭を大文字にするだけでなく
先頭以外の大文字を小文字にしてしまいますよね。

helloWorld → HelloWorldとしたいのですが、適切な方法を
教えていただけますか?

183 名前:デフォルトの名無しさん [2007/06/18(月) 16:54:13 ]
最初の一文字を取り出して大文字にすれば?

184 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 17:31:56 ]
s = "helloWorld"
Mid$(s, 1, 1) = UCase$(Mid$(s, 1, 1))


185 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:59:57 ]
Midステートメント使う人久しぶりに見た気がする
Midステートメント自体は自分で使いまくってるからよく見てるが
公開されたソース見ても、こういうところの回答見ても
使ってる人殆ど居ないからなぁ

ところで、Leftステートメントは無いから代入左辺はMidでいいが
右辺の関数はMidではなくLeftの方がいいのでは?
つ Mid$(s, 1, 1) = UCase$(Left$(s, 1))

まあ実はMidもLeftも無くてもOKなんだけどね
Midステートメント側で置換文字数指定していれば、何文字代入しようと指定文字数以外は置換されない
つ Mid$(s, 1, 1) = UCase$(s)

逆に代入する文字数を指定しておけば、置換する文字数は指定しなくても問題なかったりする
つ Mid$(s, 1) = UCase$(Left$(s, 1))

186 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:32:41 ]
>>185
横レスだが、勉強になった

187 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:41:49 ]
つかMidって参照だけかと思ってたw

188 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 23:11:52 ]
MSbasicからの伝統で、mid$は関数版とステートメント版がある。

189 名前:デフォルトの名無しさん [2007/06/19(火) 12:08:51 ]
エクセルソフトを持ってないので、フリーソフトのOPENOFFICEを使用
ダウンロードしてVBAは作成できるんでしょうか?

190 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 13:18:08 ]
>>189
アレ使えばね
具体的な話はスレ違いなので伏せるけど



191 名前:デフォルトの名無しさん [2007/06/19(火) 14:45:55 ]
日本語で書け

192 名前:デフォルトの名無しさん [2007/06/19(火) 14:54:14 ]
全くだ
質問内容は察せるが、日本語じゃないよな

193 名前:デフォルトの名無しさん [2007/06/19(火) 21:26:28 ]
みなさん、こんばんは。

とある事情により、エクセルのワークシート内に三角波のデータを埋め込みたくなりました。
サインカーブのデータだったら、sin関数でデータを作ったことはありますが、
三角波の場合、どうしたらいいですか?

私がエクセル上でやろうとすると、くどい if文のネストになりそうです。

どなたか、あっさりしたもの、できませんでしょうか?








194 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 21:46:07 ]
汎用アルゴリズムの話はスレ違い
VBAどころかVBも関係ないし

195 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 21:58:39 ]
ワークシート埋め尽くす方法ぐらい教えてあげたらw

196 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:13:28 ]
フーリエ展開してしまえw

197 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:48:00 ]
>>189
>エクセルソフトを持ってないので

ちょwww、当たり前だwww

エクセルソフト
www.xlsoft.com/jp/

198 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:24:31 ]
インテルのコンパイラ高いな

199 名前:使えない子 mailto:sage [2007/06/20(水) 14:59:47 ]
上司からいきなり「調べといて」
キタ───ヽ(´Д`;)ノ───!!!

既存ブックのシート構成は、
(シート1)・書類のテンプレ
(シート2)・いろんな調査項目
という感じで、シート2を開いてマクロを実行すると、
いろんな調査項目が大分類ごとに分けて、
書類のテンプレに記入してそれぞれシートを作る、
ということをしています。

今度は、それらの作られる大分類ごとのシートを
新しいブックに作りたい、ということです。
手作業であれば、
[シートの移動またはコピー]のダイアログで、
[移動先ブック名]に「(新しいブック)」を指定し、
[コピーを作成する]にチェックを入れて[OK]ですが、
これをマクロでやりたい、というのです。

[新しいマクロの記録]をしても記録されないので、
困ってしまいました。
マクロやVBA等でやるには、どうしたらよいでしょうか。
どなたかお力添えください。m(_ _)m


200 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 15:33:41 ]
>>199
やってみたら記録されたけど?
Sheets("Sheet1").Copy



201 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 18:34:08 ]
記録を停止してない
なんてオチだったりしてW

202 名前:デフォルトの名無しさん [2007/06/21(木) 00:02:18 ]
前任の作ったエクセルファイル+VBAを別ファイルで再構築しているのですが、
errors(0).description の部分でエラー「コレクションが存在しません」になります。
元のファイルでは正常に動いているのですが、
新しいファイルではどのようにしたら回避できるのでしょうか。

203 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:09:31 ]
参照設定

204 名前:202 [2007/06/21(木) 00:42:58 ]
レスどもです。Excelは2000で、
Microsoft DAO 3.6 Object Libraryの参照設定はチェック済なのですが
それでもエラーが出てしまいます。
他にも必要な参照があるのでしょうか。

205 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:46:51 ]
エラーなければerrorsコレクションはないだろ
まずファイルの問題か環境の問題かはっきりさせること

206 名前:202 mailto:sage [2007/06/21(木) 01:30:40 ]
確かにそうですね。
言われてみればそもそもここはエラートラップなので
他の部分に問題がある可能性大です。切り分けに挑戦して見ます。

207 名前:193 [2007/06/21(木) 02:00:10 ]
>三角波のデータ

自分で作りました。
作ったのは関数です。(セルに直接記述するのでVBAとは関係ないですね...)

割とあっさりめの形になったと思います。

言わば、sin関数になぞらえるなら、三角波関数みたいなもんです。

1/(2π)*arcsin(sin(t/T*2π))/(1/4)


自分で自分を褒めてやりたいです。


208 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 08:37:41 ]
うわ、重そう。つーか、頭悪そう。

209 名前:デフォルトの名無しさん [2007/06/21(木) 14:47:30 ]
お聞きしたいんですけど
コンボボックスのプロパティのLinkedCellに値が入らないのですが
どうやって入れるのか教えてください

210 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 20:48:44 ]
普通に=で代入するか、プロパティウィンドウに入力するかだよ
間違った値入れてなければそれでOK



211 名前:デフォルトの名無しさん [2007/06/22(金) 00:02:30 ]
>>208

頭わるいやつに作れるわけねーだろ。

おめぇ、つくってみ?
ってか、つくれる?


212 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:04:35 ]
>>211
本人乙。

213 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:38:54 ]
>>211
煽ったら作って貰えると思って必死だな。
今宵は枕が涙で濡れてるんぢゃねぇの?

214 名前:デフォルトの名無しさん [2007/06/22(金) 00:48:37 ]
バイナリーファイル(テキスト形式でないファイル)を開いて、
nバイト目の数字を読み込むっていうプログラムを組みたいのですが、
VBAでできますか?


215 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:56:55 ]
よゆう

216 名前:214 [2007/06/22(金) 11:34:20 ]
ちょっとしたヒントだけでも教えてつかわさい。


217 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 12:47:31 ]
open filename for random as #filenumber len=1
get #filenumber, n, buf

218 名前:214 [2007/06/22(金) 15:54:48 ]
えっ、まじですか。
N88BASICとまったく同じぢゃ・・・


219 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:56:42 ]
そりゃぁ、MicrosoftBasicの派生だからねぇ。どっちも。

220 名前:214 [2007/06/22(金) 18:54:47 ]
わしもスレに貢献しよう
arcsin(sin(t/T*2π))
って
t/T*2π
と同じでしょうw

つりか・・・まじか?




221 名前:デフォルトの名無しさん [2007/06/22(金) 23:32:39 ]
教えて頂きたいです。△にぶつかった後に円を描くようにしたいのですが・・・
難しくて。ご教授下さい。
Sub seven() ' 弾けるボール
ActiveCell.Offset(5, 0).Value = "手" ActiveCell.Offset(5, 1).Value = "○"
ActiveCell.Offset(5, 7).Value = "▲" For i = 1 To 6 For J = 1 To 500
ActiveCell.Offset(5, i).Value = "○" ActiveCell.Offset(5, i).Value = ""
ActiveCell.Offset(5, i + 1).Value = "" ActiveCell.Offset(5, i + 1).Value = "○"
Next J ActiveCell.Offset(0, i + 1).Value = ""
Next i ActiveCell.Offset(5, 7).Select.Value = "☆"
For i = 1 To 3 A = ActiveCell ActiveCell = ""
ActiveCell.Offset(-1, 1).Activate For J = 1 To 500
ActiveCell = A Next J Next i For i = 1 To 3
A = ActiveCell ActiveCell = "" ActiveCell.Offset(1, 1).Activate
For J = 1 To 500 ActiveCell = A Next J Next i
For i = 1 To 3 ActiveCell = "" ActiveCell.Offset(1, -1).Activate
For J = 1 To 500 ActiveCell = A Next J Next i
For i = 1 To 3 A = ActiveCell ActiveCell = ""
ActiveCell.Offset(-1, 1).Activate For J = 1 To 1000
ActiveCell = A Next J Next i End Sub


222 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:51:21 ]
>>220
前者は周期関数になる。元レスは、それを使って三角波にできると悦に入っていたらしい。

223 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:35:42 ]
>>221
スレ違い。>>16

224 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 13:52:35 ]
>>223
スレ違いで拒否るのもいいが、いい加減過疎ってないか?このスレ
あと質問に答えても質問者もほったらかし多いし・・・
俺はわからんから答えんだけだが

225 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 15:11:42 ]
> いい加減過疎ってないか?このスレ
この板はこんなものだよ
一応ここは過疎板だから

当然、この板にもここより賑わってるスレはあるが
このスレでも平均以上どころか勢い上位1割に入るほど
もっと静かでもいいくらいだ

226 名前:デフォルトの名無しさん [2007/06/24(日) 08:44:32 ]
あるRangeの一番左上のセルの情報を得たいのですが、
どうしたらよいでしょうか?
Offsetだと、Range全体が取得されてしまいます。
左上のセルのRangeだけを得たいのですが・・・

ActiveSheet.Range("資産表[資産]").Offset(0, 0).Select

227 名前:デフォルトの名無しさん [2007/06/24(日) 08:47:10 ]
>>226
自己解決しました。

ActiveSheet.Range("資産表[資産]").Cells(1, 1).Select

Cellsでした。Rangeにないかと思ってました。

228 名前:デフォルトの名無しさん [2007/06/24(日) 09:49:10 ]
すみません、質問です。

商品NO 値段 日付 〜
100 20 5/1
101 21 5/1

といったデータが600まである表があります。
修正や訂正をするため、月一で直さなければいけないんですが
一回別シートに抽出して,そこで変更をし、元あった行に上書きをする
そのように作れと上司にいわれてしまいました。

抽出し、別シートに移すことは出来たのですが、それを元の所に
上書きするのには、どうしたらいいのでしょうか?
切実に困っています。教えていただけたら嬉しいです。

229 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:20:48 ]
抽出した行と元の行を関連づければいいでしょ
方法はいくらでもあるけど
一番簡単なのは別のシートの同じ行に抽出するやり方かな

230 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:15:43 ]
>>228
商品Noをkeyにして.findメソッドで検索して
コピーするVBAをつくる



231 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:16:46 ]
同じ行への抽出だとわざわざ抽出する意味がないと言われます
関連付けっていうのはどのようにやるのですか?

232 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:37:17 ]
すみません、書き込みしている最中に書き込んで頂いてたみたいです。
わかりました、まだKeyとかFindメソッドの使い方が上手ではないのですが
月曜日にがんばってみます。

もしまた解らなかったら書き込みしにきます。
そのときもよろしくお願いします。
ありがとうございました。

233 名前: [2007/06/25(月) 23:05:08 ]
マクロ使って初心者でも簡単に作れるプログラムって何かあります?
課題でなんでもいいから作ってこいって言われたんですけど何を作ればいいのやら。
参考書買うしかないんすかね〜お勧めのWEBサイトありますか?

234 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:07:54 ]
MsgBox "Hello World!"

235 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:59:48 ]
>>1の2番目です!
しつもん!
vlookupのプロパティ?に変数を使いたいんですがうまくいきません
どうすればいいでしょうか?

↓こんなふうにしたい

for count=1 to 10
   Cells(count,4).select
   Activecell.Value = "=Vlookup("count"1,B:C,2,False)
next count

A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな?
BC列も本当はRange("B65536").End(xlUp).Selectで取得した値を使いたいです。

というかそれ以前にRangeで変数を使う方法すらわからない・・・

236 名前:235 mailto:sage [2007/06/26(火) 01:07:09 ]
書きまちがいを発見

× Activecell.Value = "=Vlookup("count"1,B:C,2,False)
△ Activecell.Value = "=Vlookup(1"count",B:C,2,False)"
○ ?

ところで="〜"で書くのとApplication.WorksheetFunction .VLookup使うのって何か違うのでしょうか?


237 名前:デフォルトの名無しさん [2007/06/26(火) 01:08:48 ]
ExcelVBAで、サブルーチンのネストはできますか?

238 名前:デフォルトの名無しさん [2007/06/26(火) 01:19:37 ]
>>235
悪い、したいことが分からない。
>A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな?
これってVLOOKUPか?

ちなみに
ActiveCell.Value="=SUM(B2:B4)"
ActiveCell.Value=Application.WorkSheetFunction.Sum(Range("B2"),Range("B4"))
との違いは、最初の方は、マクロ実行後にB2からB4のセルの値が変われば、ActiveCell
の値も変わる。でも、下の方は変わらない。
それだけじゃないけどな。

239 名前:235 mailto:sage [2007/06/26(火) 01:33:37 ]
>>238
説明悪くてすまん

まずA1のセルを選択
B列のどこかにA1と同じデータがあったら(B10とする)C10をD1にコピー
これをA10まで繰り返し

vlookupじゃないの?


当初↓みたいなことをやってたのですが、データが各1万行とかになったら速度が恐ろしいことになりまして。
どうにかこれを高速化したいのです。

for count1=1 to Range("A65536").End(xlUp).Select
  for count2=1 to Range("B65536").End(xlUp).Select
    if Cells(count1,1).value = Cells(count2,2),value then
      Cells(count1,4).value = Cells(count2,3).value
    end if
  next count2
next count1

240 名前:デフォルトの名無しさん [2007/06/26(火) 01:47:48 ]
>>239
ああ、確かにVLOOKUPだな。
この感じだと、セルD4に 「=VLOOKUP(A1,B:C,2)」って入るよな。
それをセルD10まで下にコピーするのじゃいけないの?





241 名前:235 mailto:sage [2007/06/26(火) 01:58:26 ]
>>240
各1万行くらいで行数が不定なのです
まとめて出来る(で、forより早い)方法があればvlookupでなくてもなんでもいいのですが


242 名前:デフォルトの名無しさん [2007/06/26(火) 02:17:26 ]
>>241
もう頭が働かないんで…
とりあえず235で質問してたRangeを変数に代入する方法
 Dim targetRange As Range 
 Set targetRange = Range("A65536").End(Xlup)

これでtargetRange.Rowで最終行が何行目か分かる。

ちなみにforでも一万行くらいならあまり時間かからないような気がする。
forのネストにする意味が分からない。一致したらExit For でFor文を
抜ければいいのに。



243 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:15:16 ]
>データが各1万行とかになったら速度が恐ろしいことになりまして

実行中の画面描画をOFFにしてないんじゃない?
そこ変えるだけで解決することもあるよ

244 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:20:47 ]
Application.ScreenUpdating = False
処理の終了段階でTrueに戻して下さい。

Application.EnableEvents = False
処理の終了段階でTrueに戻して下さい。

Application.Calculation = xlCalculationManual
処理の終了段階でxlCalculationAutomaticに戻して下さい。

マクロ動作中にEscキーで止められるのを抑制する。
マクロ動作中に一切のキーやマウス操作を制限する。
Application.Interactive = False
処理の終了段階でTrueに戻して下さい。

但し、この状態で何らかの理由でマクロが停止してしまうと、Excel自体は何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。この記述だけは確実に動作検証が終わってから設定して下さい。

マクロ動作中はマウスカーソルを「砂時計」にする。
Application.Cursor = xlWait
処理の終了段階でxlDefaultに戻して下さい。

www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_040.html


245 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:00:51 ]
>>235
Range("D1").Resize(Cells(Rows.Count, "A").End(xlUp).Row).Formula = _
"=VLOOKUP(A1,B$1:C$" & Cells(Rows.Count, "C").End(xlUp).Row & ",2,FALSE)"

>>244
>何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。

イミディエイトウィンドに
Application.ScreenUpdating = True
で、エンターキー

246 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:07:51 ]
 A     B    C       D
東京  東京  東京  =LOOKUP(A1,B:B,C:C)
     大阪  大阪
     愛知  名古屋
     福岡  福岡
     北海道 札幌


とするとD1が名古屋になるんだけど気のせい?

247 名前:235 mailto:sage [2007/06/27(水) 01:06:07 ]
>>242,243,244,245さん、ありがとうございます。

>>242
逆でして、
for i=1 to Range("A65536").End(Xlup)
Range("A"i).select
next i
みたいなことがしたかったのです。

>>243,244,245
本日ぐぐりまくってとりあえずそこらへんの設定をしました。

やりたいことを綴ってたらえらい長くなってしまったので表にしました(とりあえずodsとxml)
見ていただければ幸いです
ttp://bebe.run.buttobi.net/up/src/be_1262.zip

248 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:10:52 ]
2003personalだとエラーが出て開けない

249 名前:235 mailto:sage [2007/06/27(水) 01:21:05 ]
うゆー

ってか、今更xlsを発見した。すまねぇ
ttp://bebe.run.buttobi.net/up/src/be_1263.zip

250 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:27:13 ]
なんか昔、これの横バージョンを総合相談所のほうでコード書いた気がする…



251 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:52:19 ]
横バージョンじゃなくて、似たような表の作成だった。
相談所55の部品表のをいじればなんとかなるんじゃないかな。
実行速度もシートをメモリに読み込んですれば大丈夫だろう。
もう寝る。

252 名前:245 mailto:sage [2007/06/27(水) 17:46:50 ]
'Microsoft Scripting Runtime を参照設定
'結果はG,H,I列の1行目以下に出力

'結果出力用配列 出力行数を上回る行数を確保。下回るとエラー
Dim ans(5000, 2) As String

Dim d As New Scripting.Dictionary
Dim v() As Variant
Dim buf As Variant
Dim vv As Variant
Dim i As Long
Dim n As Long

v = Range("D1", Cells(Rows.Count, "E").End(xlUp)).Value

For i = 1 To UBound(v)
  If d.Exists(v(i, 1)) Then
    d(v(i, 1)) = d(v(i, 1)) & vbTab & v(i, 2)
  Else
    d.Add v(i, 1), v(i, 2)
  End If
Next i

v = Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef