現在sheet("一覧")からsheet("table")へ特定のデータを探し〇×表を作ろうしているのですが大きな課題にぶつかり解決策が思いつかないため質問です。
まずはコードから(プロシージャが大きいため一部抜粋したものです
VBA
1'sheetをセット 2Dim ws1,ws2 As Worksheet 3Set ws1 = sheets("一覧") 4Set ws2 = sheets("table") 5 6'変化する数字をセット 7Dim a As Long 8c = 4 9'一覧のF4から空白までループ 10Do While ws1.Cells(c,6).Value<>"" 11’一覧から2つの単語を含むセルを探し〇×表へ反映 12If Instr(ws1.Cells(c,6).Value"app") And InStr(ws1.Cells(c,6).Value"101")<>0 Then 13 '条件を満たせばB2へ〇満たせないなら×を 14 ws2.Cells(2,2).Value = "〇" 15 Exit Do 16 Else 17 ws2.Cells(2,2).Value = "×" 18End If 19c = c+1 20Loop
これを左の文字が13種、右の数字が30種ありすべてを上記のようにベタ打ち力技で作りました。
しかしこれでは何かある度に膨大な量の修正&見逃しがないか何重もの確認を強いられどうにか簡単にできないか悩んでおります。
現在やってみたのはこの左右に入れる検索対象の文字や数字をどこか隅にでもまとめ1つの〇×処理が終われば1つずらして次へ…というものです。
しかしどのようにセルをずらしその都度中を抽出、InStrの中に持っていくかがわからないため困っております。
ひとまずわかっていることは
・検索する文字数列セル指定、c+1のような形にする。
・〇×表のセル番地もベタ打ちではなくなにか別の方法で指定しないといけない。
以上の考察をして調べてみましたがわからないため質問致しました。
単に○×だけ記録しても、後で何のことかよくわからなくないですか?
検索するキーワードをシート上に書いておいて、
それを順番に見て行きながら検索し、結果を表示してはいかがでしょう?
シートに書く場合も、2列にキーワードを並べて書いて
一覧のようにするのか、
項目行と項目列を用意してクロス集計表のようにするのか、
まずは、シート上でのイメージを提示してみてはいかがでしょうか?
今回がマイグレ後の導入確認に使用するものになります。顧客の方はログなどを見てもわからない方のため表の○×でこれは入ってる、これは入ってないがわかれば大丈夫なので今回このような処理がしたいと考えております。説明が足りず申し訳ございません
なんにしても、シート上に検索キーワードを入力しておけば、
コードが短くなると思いますが、その線は全くなしで、
コードの中に書きたいということですか?
その場合条件を満たしたら次のセルへ、満たしたら次のセルへとループは可能なのでしょうか?
最近それを思いつきやってみたのですがうまくいかず断念してました。
その時のコードが以下のような流れです。
```VBA
Dim ws1,ws2 As Worksheet
Set ws1 = sheets("一覧")
Set ws2 = sheets("table")
'Cellsに入れる数字
Dim a,c As Long
a = 1
c = 4
Dim centname As Long
centname = cells(a,1).value
'空白までループ
Do While ws1.Cells(c,6).Value<>""
If Instr(ws1.Cells(c,6).Value"app") And InStr(ws1.Cells(c,6).Value"centname")<>0 Then
'条件を満たせばB2へ〇満たせないなら×を
ws2.Cells(2,2).Value = "〇"
Exit Do
Else
ws2.Cells(2,2).Value = "×"
End If
a = a+1
c = c+1
Loop
```
これをやるとcentname = cells(a,1).valueで型が一致しないとエラーがでてしまうんですよね。
>今回がマイグレ後の導入確認に使用する
といわれても、私はイメージがわかりません。
右とか左というのもなんだろう?となってます。
具体的に、どういうデータに対して、
どういう形でキーワードを指定して検索して、
○×を判定するのでしょうか?
>これをやるとcentname = cells(a,1).valueで型が一致しないとエラーがでてしまうんですよね。
Long型の変数に数値でないものを代入しようとしたらそうなるかもですね。
If Instr(ws1.Cells(c,6).Value"app") And InStr(ws1.Cells(c,6).Value"101")<>0 Then
上記の文自体が、エラーになります。なにをなさりたいのかがよくわかりません。画像等で具体的に提示していただけると良い回答が得られるかと。
回答2件
あなたの回答
tips
プレビュー