• ベストアンサー

エクセルVBAでの質問です。

エクセルVBAでの質問です。 以下のようなA列にID、B列、C列にそれぞれIDに対応したデータがあります。 A      B      C ID    名前    住所 10000 ~ 39999 IDを10000~19999、20000~29999、30000~39999で分けて別シートに もっていこうと思っています。 自分としては、ID左端の数字をLeft関数を使って何とかしようと思っていましたが、 どうしてもうまくいきません。 何かいい方法はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

オートフィルタでさくっと絞ってコピーしてみると,簡単かなと思います。 それと,「別のシート」って一体どんなですか。 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

mango100
質問者

お礼

オートフィルタがありましたね。 頭が凝り固まってました。 ありがとうございました。

その他の回答 (3)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

数値としての例としては以下のような感じです 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

mango100
質問者

お礼

Select caseだとこうやるんですね。 一度やってみましたが、自分の能力的に できませんでした。 ありがとうございました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

IDを数値として分ければ良いのではないですか? なにが上手くいかなかったのでしょう?

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>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 とか試してみては。

mango100
質問者

お礼

オートフィルタに頭がいきませんでした。 ありがとうございました。