VBAについてです。該当しない時は"0"と表記したいのですが、どうやってもうまくいきません。。
Sub Sample()
Dim nCount, nActSheet, nName, nSheet
Dim sTargetName
nActSheet = ActiveSheet.Index
nCount = Worksheets.Count
If nCount <= nActSheet Then Exit Sub '右にシートが無ければ終了
'アクティブシートのB列の値を検査「名前」とする
For nName = 1 To Cells(Rows.Count, 2).End(xlUp).Row
sTargetName = Sheets(nActSheet).Range("B" & nName)
'右側のシートを1シートづつ検査対象シートとする
For nSheet = (nActSheet + 1) To nCount
'検査対象シートのB列に検査「名前」があるか確認
If Application.WorksheetFunction.CountIf(Worksheets(nSheet).Range("B5:B60"), sTargetName) > 0 Then
'「名前」があればN、P列の値をアクティブシートのK、M列に入れる
With Worksheets(nSheet)
nRow = Application.WorksheetFunction.Match(sTargetName, .Range("B:B"), 0)
Range("K" & nName) = .Range("N" & nRow)
Range("M" & nName) = .Range("P" & nRow)
End With
Exit For '1つ見つかったらその「名前」の検査は終了
End If
Next nSheet
Next nName
End Sub
B5~B34までのキーを元に他のシートを検索して、KとMにデータを取得するというものです。
今は該当するものがなければ空白になってますが、それを「0」と表記したいのです。
私がそれらしい構文を入れたら関係のない所まで「0」と変換されてしまいました。
データを入力したい範囲はK列とM列の5行目~34行目までです。
上の構文のどの部分に何を付け加えたら良いのでしょうか・・?
教えてください。
こんにちは、参考に
Sub Test()
Dim c As Range
Dim ws As Worksheet
Dim meR As Variant
If ActiveSheet.Index = Worksheets.Count Then Exit Sub
For Each c In Range("B1", Cells(Rows.Count, "B").End(xlUp))
Cells(c.Row, "K").Value = 0
Cells(c.Row, "M").Value = 0
For Each ws In Worksheets
If ActiveSheet.Index < ws.Index Then
myR = Application.Match(c.Value, ws.Range("B5:B60"), 0)
If Not IsError(myR) Then
Cells(c.Row, "K").Value = ws.Cells(myR + 4, "N").Value
Cells(c.Row, "M").Value = ws.Cells(myR + 4, "P").Value
Exit For
End If
End If
Next
Next
End Sub
多分ご質問の最も簡単な解決手順としては,
1.先に全部に(初期値としての)ゼロを埋めておく
2.現行のマクロで,該当データはゼロから所定の値に書き換えさせる
で十分と思われます。
その上で,ご自分でももっとマクロを勉強してみたいというお話なら。
基本的な制御構造は
If 名前があったら
探して転記する
Else
無かったのでゼロを入れる
End If
のようになりそうです。
つまり…
<抜粋>
'検査対象シートのB列に検査「名前」があるか確認
If Application.WorksheetFunction.CountIf(Worksheets(nSheet).Range("B5:B60"), sTargetName) > 0 Then
'---『「名前」があればN、P列の値をアクティブシートのK、M列に入れる』---
Exit For '1つ見つかったらその「名前」の検査は終了
’↓ここから追加
Else
’---『「名前」が無かったので,どこかの列のどこかの行のセルにゼロを入れる』---
’このタイミングでどこにゼロを入れたいのか,ご説明ではまだ不明です
’「K列とM列の5行目~34行目まで」にゼロを入れるのでは無さそうです。
’↑ここまで
End If
もう少し検討してみてください。
質問者
お礼
回答有難うございました。
If 名前があったら
探して転記する
Else
無かったのでゼロを入れる
End If
このタイミングで私もやってみてたんですが、出来なかったので、何で!?でした。
多分「無かったのでゼロを入れる」って命令文が変だったんでしょうね(⌒_⌒;
お礼
ありがとうございました。 思ったとおりに実行できました(o^-^o)