Excel VBA 質問スレ Part67

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 33da-3+hg)
垢版 |
2020/06/26(金) 02:01:29.56ID:uDfmpksE0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part66
https://mevius.5ch.net/test/read.cgi/tech/1589085825/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/06/26(金) 07:58:40.55ID:PIx3bjtD0
>>1
おちゅ
2020/06/26(金) 19:07:55.93ID:ZjxMZdyJ0
VBAでgrep検索を使いたいんだが教えてくれ。
https://website-note.net/vba/excel-grep-macro/
上のサイトのコードをコピペして動くまではいいんだけど、もう一つ条件を加えて
'キーワードを含むセルの情報をアウトプット時にキーワードの右のセルをアウトプットさせるようにしたい。
そこでOptionButtonを2つ作ってOpB1がtrueのときに普通に動いて、falseのときに
キーワードの右をアウトプットさせるコードを書いたんだがうまくいかない。
ifもselectcaseも試したんだけどだれか教えてくれ、VBA初心者で頭かかえてる。
つくったもの↓
'キーワードを含むセルの内容
If OptionButton1.value =then
省略 .Cells(lcnt, 7).Value = rFoundCell.Value
else
省略 .Cells(lcnt, 7).Value = rFoundCell.offset(0,1).Value
2020/06/26(金) 20:08:11.16ID:SBXE4EMs0
・OpB1って何ですか?丁寧に書いて
・せめてoutputCellInfoのソースは全部書いて
・=thenがガチなのかタイポなのか分からんから直打ちじゃなくてコピペして
2020/06/26(金) 20:20:30.07ID:PIx3bjtD0
日本語訳:

上のサイトのコードだと
キーワードを含むセルの値が、G列に出力されます。

これを以下のように変更したいです

キーワードを含むセルを検索したあと、このセルの値だけでなく、このセルのすぐ右側のセルの値をH列に出力したいです。

できたら、オプションボタンを新設して、右側セルの値を出力するかしないかを選択できるようにしたいです





面倒だから後はお前らにまかせた
2020/06/26(金) 20:26:55.66ID:ZjxMZdyJ0
>>4すみません、コードはります
Private Sub outputCellInfo(ByVal sTmpPath As String, ByVal sFilePath As String, ByVal sTmpSheetName As String, _
ByVal rFoundCell As Range)
Dim OptionButton1 As Boolean
If OptionButton1 = True Then
With ThisWorkbook.Sheets(STR_GREP_SHEET_NAME)
.Cells(lcnt, 2).Value = lcnt - 7
.Cells(lcnt, 3).Value = sFilePath
.Cells(lcnt, 4).Value = sTmpPath
.Cells(lcnt, 5).Value = sTmpSheetName
.Cells(lcnt, 6).Value = convertRange(rFoundCell.Column) & rFoundCell.Row
.Cells(lcnt, 7).Value = rFoundCell.Value
End With
lcnt = lcnt + 1
Else:
With ThisWorkbook.Sheets(STR_GREP_SHEET_NAME)
.Cells(lcnt, 2).Value = lcnt - 7
.Cells(lcnt, 3).Value = sFilePath
.Cells(lcnt, 4).Value = sTmpPath
.Cells(lcnt, 5).Value = sTmpSheetName
.Cells(lcnt, 6).Value = convertRange(rFoundCell.Column) & rFoundCell.Row
.Cells(lcnt, 7).Value = rFoundCell.Offset(0, 1).Value
End With
lcnt = lcnt + 1
End If
End Sub
2020/06/26(金) 20:40:26.18ID:nEhmFRZ4a
なんでElseに:ついてんだ?
2020/06/26(金) 20:40:29.37ID:1oZqQJala
張り付けたオプションボタンと定義したのは別物じゃね
2020/06/26(金) 20:50:43.26ID:PIx3bjtD0
つか、そもそもそのサイトのコードって正確に動く?
キーワードを含むセルを網羅しないんだけど

nothingになるRangeを比較対象に置いてるあたりがあれだ
2020/06/26(金) 21:05:20.01ID:ZjxMZdyJ0
Elseの:はミスです…
オプションボタンの定義…ググりなおします
>>9そうです、全文では無いんですよね…全文検索くんもDLして
編集しようとしましたが今の私では無理でした。
2020/06/26(金) 23:24:58.46ID:SBXE4EMs0
>>6
ぱっと見で分かるのは、OptionButton1が再定義されてて目的の値を参照してない事
Dim OptionButton1 を消して、>>3で自分で書いたようにOptionButton1.valueを評価してみて

あと、オブジェクト名にButtonって入ってるからコントロールだと思うけど、
もしコマンドボタンならこの用途でValueプロパティは使えないから、チェックボックスにしよう

解説サイトのソースも修正
grepExcelSheetメソッド
Loop While rTmpFoundCell <> rFoundFirstCell

Loop While rTmpFoundCell.Address <> rFoundFirstCell.Address

openExcelFilesメソッド
sTmpPath = Dir(sFilePath & "*.xls")

sTmpPath = Dir(sFilePath & "*.xls?")

それに伴って Do While sTmpPath <> "" 内の文を
If Not sTmpPath Like "*." & ThisWorkbook.Name Then 〜 End If
で括る

細かいこと言うと、Blean型を判定するときにリテラルと比較(= True や = False)はカッコ悪いから止めた方がいい
解説サイトではやってるけどね
2020/06/26(金) 23:25:32.05ID:ZjxMZdyJ0
>>3です
無理やりですが自己解決しました
標準モジュール2にアウトプットのコードをさわったものをコピペして
コマンドボタンクリックしたときの動作をIfでCallするようにしたら出来ました

でもやっぱりこのコード重いですね。どうにか軽くする方法無いものですかね。
2020/06/26(金) 23:28:15.39ID:ZjxMZdyJ0
>>11修正ありがとうございます、提案されたやり方も試してみます!
2020/06/26(金) 23:49:56.02ID:kQH1YyZn0
配列にすれば
あとやってるかとは思うけど自動計算と画面更新オフ
2020/06/26(金) 23:53:39.92ID:ZjxMZdyJ0
すみません、配列にするとはどういうことをすることですか?
2020/06/27(土) 00:17:07.69ID:KqbSykww0
Cells(1, 1).Value = "あ"
Cells(1, 2).Value = "い"
Cells(1, 3).Value = "う"
  ↓ ↓ ↓
Range("A1:C1").Value = Array("あ", "い", "う")

1個ずつじゃなくて、一気に放り込めってことでしょう。>>15
2020/06/27(土) 02:29:31.12ID:gCUCp3Nd0
そこを高速化してもしかたないのでは・・・
2020/06/27(土) 05:22:36.02ID:J5vHObt/0
他人にコード書かせて動かしたら遅いと文句言うのって人としてどうなの?
19デフォルトの名無しさん (ワッチョイ 8fba-8HP2)
垢版 |
2020/06/27(土) 08:53:12.31ID:9qJBLgyD0
>>
20デフォルトの名無しさん (ワッチョイ 8ff1-of6p)
垢版 |
2020/06/27(土) 09:24:13.86ID:YKskLwzM0
<<
2020/06/27(土) 09:43:15.25ID:wwwZDyDia
ビットシフトとは各桁を 1 桁左や右にずらすことです。

https://www.tipsfound.com/vba/02018

VBA にはそのような演算子はありませんが次のようにしてできます。
\ (2 ^ 1) ' 1 桁右へシフト
* (2 ^ 1) ' 1 桁左へシフト
2020/06/27(土) 10:06:21.20ID:lV2RRwzl0
実行時エラー '6':

オーバーフローしました。
23デフォルトの名無しさん (ワッチョイ cf46-pKDl)
垢版 |
2020/06/27(土) 10:49:37.32ID:gKvpRzl30
今日は、タイマー作ってます。
IeTimerに
Private Sub IeTimer1_Timer()
Me.Label1 = Now
Me.IeTimer1.Interval = 1000 - (Timer Mod 1000)
End Sub
とかいて見たのですが、何か一秒の長さが変に感じます。
気のせいなんでしょうか?。

Excel 97
OS;Windows 98
機種;NEC VersaPro NX VP13C
24デフォルトの名無しさん (ワッチョイ cf46-pKDl)
垢版 |
2020/06/27(土) 10:55:33.95ID:gKvpRzl30
今日は、タイマー作ってます。
MsgBox 36000*24
はエラーにならないが
MsgBox 24*3600
は実行時エラーオーバーフローしました。
となります。

どうしてなんでしょうか?。
2020/06/27(土) 11:02:47.04ID:aTkq7ke+a
>>23
教えてキャン>>98<<ビー
https://oshiete.goo.ne.jp/qa/597623.html
>Win98系のOSの場合ですが、処理中に、
頻繁にDoEventsを実行する必要があります。
 これは、OSの特性です。
2020/06/27(土) 11:13:07.90ID:lV2RRwzl0
釣りなのか本気なのか判断に困る質問だな
2020/06/27(土) 11:48:36.47ID:P+1UXm0n0
ヤベーイ
2020/06/27(土) 23:20:44.51ID:J5vHObt/0
動作がおかしいのは古いからじゃないかな
2020/06/28(日) 00:22:47.53ID:/mLredfO0
VBAで宣言せずに数式を書くと、式の中で最初に出てきた数字によって型が勝手に決められる仕様
小数点があったら、小数点以下が0でもDouble型
32767以下の整数はInteger型
32768以上の整数はLong型
になる

だから「24*3600」という式を書くと、最初に出てくる数字は24だからInteger型とみなされて、24*3600はInteger型の制限範囲を超えてるからエラーになる

変数を使わずに数値の型を指定したい時は型文字を使うか実数型にしてしまう
この場合は
24& * 3600 (Double型)
24.0 * 3600 (Double型)
24# * 3600 (Long型)
と書けばエラーにならない

ちなみにVBA(Excel)のバージョンは関係ない
最新でも仕様は変わってないから同じ所でエラーになる
2020/06/28(日) 07:42:30.13ID:sqW+tWgm0
>>29
へー面白いね
2020/06/28(日) 07:45:50.98ID:/E8O58u/0
プロジェクトウィンドウが何かの表紙に名前順にソートされてしまったんですが、標準モジュール、クラスモジュール等の階層表示ってどうやって戻すのでしょうか
2020/06/28(日) 08:01:52.55ID:8pre44tM0
フォルダーの切り替え(黄色いフォルダの絵のアイコン) をクリック
2020/06/28(日) 11:43:32.56ID:VHBre49Bd
>>30
結構、常識だよ。
こういうエラーの時に真っ先に考える。
覚えておくと良い。
詳しく覚えなくても、勝手に型判定のせいかなと考えるだけで全然違う。
2020/06/28(日) 12:14:58.87ID:dFUOn9oJ0
適当なこと言っててワロタ
35デフォルトの名無しさん (ワッチョイ 7f8e-hynA)
垢版 |
2020/06/28(日) 13:50:31.47ID:Gnbk8j2I0
>>34
何が適当なんだ?
言語仕様の基本だろう
>>33に俺を言うべき
36デフォルトの名無しさん (ワッチョイ 7f8e-hynA)
垢版 |
2020/06/28(日) 13:50:52.16ID:Gnbk8j2I0
俺ではなくお礼
2020/06/28(日) 14:21:14.54ID:t+bqi6uL0
38デフォルトの名無しさん (ワッチョイ 8ff1-of6p)
垢版 |
2020/06/28(日) 14:41:16.58ID:O22xrl4H0
>>33
2020/06/28(日) 15:17:28.32ID:IDO0V0ZPa
dim 俺 as string
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況