トップページ > プログラム > 2014年06月27日 > fo8RbvYe

書き込み順位&時間帯一覧

4 位/217 ID中時間01234567891011121314151617181920212223Total
書き込み数0031100000000300000000008



使用した名前一覧書き込んだスレッド一覧
935
デフォルトの名無しさん
970
Excel VBA 質問スレ Part33

書き込みレス一覧

Excel VBA 質問スレ Part33
960 :935[sage]:2014/06/27(金) 02:00:43.32 ID:fo8RbvYe
>>924
CurrentRejion は、関係なかった。(というか>>940の指摘どおりCurrentRejionでは対応出来ない部分があった)Findを4回でどうやるのかも分からないからベタにやった。
適当な範囲をセレクトした状態で以下のマクロを実行すると、データがある範囲だけを包含した矩形の領域をセレクトして終了する……はず。<=ちょっと自信ない

Sub test()
Dim wf As WorksheetFunction
Dim rw_cnt As Long, cl_cnt As Long, st_rw As Long, ed_rw As Long, st_cl As Long, ed_cl As Long
Set wf = Application.WorksheetFunction
With Selection
 rw_cnt = .Rows.Count
 cl_cnt = .Columns.Count
 For st_rw = 1 To rw_cnt
  If wf.CountA(.Rows(st_rw)) > 0 Then Exit For
 Next st_rw
 If st_rw > rw_cnt Then
  MsgBox "Err:NoData"
  Exit Sub
 End If
 For ed_rw = rw_cnt To 1 Step -1
  If wf.CountA(.Rows(ed_rw)) > 0 Then Exit For
 Next ed_rw
 For st_cl = 1 To cl_cnt
  If wf.CountA(.Columns(st_cl)) > 0 Then Exit For
 Next st_cl
 For ed_cl = cl_cnt To 1 Step -1
  If wf.CountA(.Columns(ed_cl)) > 0 Then Exit For
 Next ed_cl
 Range(.Cells(st_rw, st_cl), .Cells(ed_rw, ed_cl)).Select
End With
Set wf = Nothing
End Sub
Excel VBA 質問スレ Part33
961 :935[sage]:2014/06/27(金) 02:02:55.35 ID:fo8RbvYe
被っちゃった……orz
Excel VBA 質問スレ Part33
963 :デフォルトの名無しさん[sage]:2014/06/27(金) 02:23:22.97 ID:fo8RbvYe
>>962
なるほど、SearchOrderとSearchDirectionを上手く使ってますね。
あと、何気にAfterも。

可読性がちょっと犠牲になるけど、c1とc2の順番を逆にしたら
ほんのちょびっと(SearchDirectionの指定一回分)だけコード短く出来ますな。
Excel VBA 質問スレ Part33
970 :デフォルトの名無しさん[sage]:2014/06/27(金) 03:19:28.93 ID:fo8RbvYe
>>964
指定する度にその設定が保存される仕様でしたよね、
たしかヘルプにはそんな様な事が書いてあったと思います。

だからr2とC2はDirectionが同じなのでOrderだけ指定すれば良くて、
c2からc1でDirectionの指定でいけたはずだな、と。(確かめてないですけど。)

>>966
すいません。
俺には思い付けなかったんです。
だから上手い手だなと思いました。

>>967
見当違いかもしれないけどジャグ配列ってのが参考になるかもです。
配列の配列とも言う奴です。
俺は使ったことがないのでよく分からないから間違ってたら許してください。
Excel VBA 質問スレ Part33
974 :970[sage]:2014/06/27(金) 04:03:10.21 ID:fo8RbvYe
>>972
あ、ホントだ。Directionは記憶されないんですね。
ちゃんと確認してませんでした。ごめんなさい。

http://msdn.microsoft.com/ja-jp/library/office/ff839746(v=office.15).aspx

でもそうすると、おそらくDirectionには規定値が存在しますよね?
省略可能なパラメータですし。
多分xlNextがデフォだと思いますが、
それの指定は省略できそうですね。<=まだ懲りてない

あと、これまた確認してなくてあてずっぽうですが、
変数の宣言で明示的にLong型にしたほうがVarantで使うより早くならないですかね?
(うちのPCは未だにExcel2000なんで、全領域指定しても全然範囲が狭いんで処理時間掛かるか試せないんです。)
Excel VBA 質問スレ Part33
984 :970[sage]:2014/06/27(金) 13:25:59.66 ID:fo8RbvYe
>>945
お呼びでないかもしれませんが、ジャグ配列のサンプルコード書きました。
こんな事がしたいのではありませんか?

Sub jagtest()
Dim tmp As Variant
Dim ary1 As Variant
Dim ary2 As Variant
Dim r As Long, c As Long
'サンプル用に2次元配列変数 ary1(1 to 500,1 to 100) をジャグ配列で作成
ReDim tmp(1 To 500)
ReDim ary1(1 To 100)
ReDim ary2(1 To 100)
With ThisWorkbook.Sheets(1)
For c = 1 To 100
For r = 1 To 500
'配列内のデータにはとりあえずセルのアドレスを使用
tmp(r) = .Cells(r, c).Address
Next r
ary1(c) = tmp
Next c
End With
stop
'ここまではサンプル用の配列変数を用意しただけ、ここからがジャグ配列の操作
For c = 1 To 100
ary2(c) = ary1(101 - c)
Next c
stop
'ary1とary2をウォッチ式とかで確認してください
End Sub
Excel VBA 質問スレ Part33
986 :970[sage]:2014/06/27(金) 13:45:07.18 ID:fo8RbvYe
すみません、書き忘れてましたが、ジャグ配列内の各要素にアクセスするときには
ary1(100,500)ではなく、ary1(100)(500)のようにしないとダメです。
あと、多分まとめて操作できるのは片方の要素(今回は最初の100の要素の方)だけです。


ところで、どなたかそろそろ次スレお願いします。
Excel VBA 質問スレ Part33
987 :970[sage]:2014/06/27(金) 13:54:03.22 ID:fo8RbvYe
あぁぁぁぁぁぁっっ!!!
サンプルコード内の注釈が間違ってた……orz
ary1もary2もサイズは(500,100)ではなく(100,500)です。
連投すみませんでした。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。