|
▼33 さん:
こんばんは。
>A B
>1,000 甲 乙 丙
>1,500 甲 丙
>2,000 乙
>2,500 乙
>3,000 丙
> ↓
>1,000 甲 乙 丙 1,000 甲 乙 丙 1,000 甲 乙 丙
>1,500 甲 丙 2,000 乙 3,000 丙
> 2,500 乙
入力データと出力データの記述はまずまずだと思いますが・・・。
Excelを使って、このようなデータベースもどきの処理を行う場合は、
先頭行には項目名を入れる癖を付けた方が良いですよ。
入力セル範囲を取得するのも楽だし、フィルタ処理なども行えますから・・・。
例えば、「Sheet1」というシートが入力データシートだとすると、
A B
1 数値 シート名
2 1,000 甲 乙 丙
3 1,500 甲 丙
4 2,000 乙
5 2,500 乙
6 3,000 丙
というようにここでは、1行目の「数値」、「シート名」を項目名にしました。
次いで、甲 乙 丙 というシートには、項目名だけ設定しておきます。
A B
1 数値 シート名
シート「甲」、「乙」、「丙」いずれも上記のように項目名のみ設定しておきます。
標準モジュールに
'=========================================================
Sub test()
Dim シート名 As Variant
Dim rng As Range
Dim g0 As Long
Dim orw As Long
シート名 = Array("甲", "乙", "丙")
With Worksheets("sheet1")
Set rng = .Range("a2", .Cells(.Rows.Count, 1).End(xlUp))
End With
If rng.Row > 1 Then
For g0 = 1 To rng.Count
For g1 = LBound(シート名) To UBound(シート名)
If InStr(rng(g0, 2), シート名(g1)) > 0 Then
With Worksheets(シート名(g1))
orw = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Range(.Cells(orw, 1), .Cells(orw, 2)).Value = rng(g0).Resize(, 2).Value
End With
End If
Next
Next
End If
End Sub
新規ブックに上記のようなテストデータを作成してtestを実行して見てください。
33 さんが提示されたような出力を振り分けます(勿論、項目名付きで)。
試してみてください。
それから
>If cell = 甲 then ですといずれも引っかかりませんでした。
このような記述をされると、大枠でこのようなコーディングをされているのか?
実際に↑そのもののコードを書かれているのかこの投稿を見ている方には
わかりません。もうすこし、全体のコードを掲載するようにしてください。
|
|