- ベストアンサー
エクセルVBAでの質問です。
エクセルVBAでの質問です。 以下のようなA列にID、B列、C列にそれぞれIDに対応したデータがあります。 A B C ID 名前 住所 10000 ~ 39999 IDを10000~19999、20000~29999、30000~39999で分けて別シートに もっていこうと思っています。 自分としては、ID左端の数字をLeft関数を使って何とかしようと思っていましたが、 どうしてもうまくいきません。 何かいい方法はないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
オートフィルタでさくっと絞ってコピーしてみると,簡単かなと思います。 それと,「別のシート」って一体どんなですか。 Sub Macro1() Dim i Dim s0 As Worksheet Set s0 = Worksheets("元のリストのシート名") On Error Resume Next For i = 10000 To 30000 Step 10000 Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = i s0.Range("A:C").AutoFilter field:=1, Criteria1:=">=" & i, Operator:=xlAnd, Criteria2:="<" & (i + 10000) s0.AutoFilter.Range.Copy Destination:=ActiveSheet.Range("A1") Next i s0.AutoFilterMode = False End Sub
その他の回答 (3)
- kmetu
- ベストアンサー率41% (562/1346)
数値としての例としては以下のような感じです Dim mRange As Range Dim mSheetName As String For Each mRange In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row) Select Case Val(mRange.Value) Case 10000 To 19999 mSheetName = "Sheet2" Case 20000 To 29999 mSheetName = "Sheet3" Case 30000 To 39999 mSheetName = "Sheet4" End Select Range(Cells(mRange.Row, 1), Cells(mRange.Row, 3)).Copy Sheets(mSheetName).Select ActiveSheet.Range("A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial Next Application.CutCopyMode = False
お礼
Select caseだとこうやるんですね。 一度やってみましたが、自分の能力的に できませんでした。 ありがとうございました。
- kmetu
- ベストアンサー率41% (562/1346)
IDを数値として分ければ良いのではないですか? なにが上手くいかなかったのでしょう?
- hallo-2007
- ベストアンサー率41% (888/2115)
>ID左端の数字をLeft関数を使って何とかしようと思っていましたが、どうしてもうまくいきません。 大丈夫だと思いますが、どこまで出来ているのでしょうか? 他 一案では INT(Range("A2").Value/10000)とかでも良いのでは オートフィルターの機能を使うなら Sub Macro1() Cells.Select Selection.AutoFilter For i = 1 To 3 Selection.AutoFilter Field:=1, Criteria1:=">=" & 10000 * i, Operator:=xlAnd, Criteria2:="<" & 10000 * (i + 1) Rows("2:40000").Copy MsgBox i & "の範囲" Next End Sub とか試してみては。
お礼
オートフィルタに頭がいきませんでした。 ありがとうございました。
お礼
オートフィルタがありましたね。 頭が凝り固まってました。 ありがとうございました。