• ベストアンサー

EXCEL【VBE】 範囲別にその行を別sheetの表に値だけを貼り付けたい。

先日 コードは特定した数値でしたが,今回は 条件に合う数値なんですが お願いします。     A   B     C       D 1  日付  コード  仕入れ金額   数量 2  10/2  0098    20       9 3  10/2  0180    21       9 4  10/3  0128    23       10 5  10/4  0089    24       9 6  10/9  0123    23       12 コード0099以下のデータ行を sheet2 へ コード0100~0149のデータ行を sheet3 へ コード0150以上のデータ行を sheet4 へ 値だけを貼り付けできないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

takara_kujio様、こんばんは。Wendy02です。 早速変更しましたので、お試しください。 >コード0099以下のデータ行を sheet2 へ >コード0100~0149のデータ行を sheet3 へ >コード0150以上のデータ行を sheet4 へ 前回、作っていて、そういうことになるのではないかなってフト思ったのが的中しました。(^^; ちょっと変更してみました。変更する場合は、MatchLike()というところで、直してください。 '------------------------------------------------- Sub TurnOverCodeClassifying2()   Dim c As Range   Dim Ret As Integer   Dim i As Long   Dim j As Integer   With ActiveSheet    'タイトル行の貼り付け    For j = 2 To 4     Worksheets("Sheet" & j).Range("A1").CurrentRegion.ClearContents      .Rows(1).Copy Worksheets("Sheet" & j).Rows(1)    Next j    For Each c In .Range("B2", Range("B65536").End(xlUp))      Ret = MatchLike(c.Value)      If Ret > 0 Then       i = Ret + 1       c.Offset(, -1).Resize(, 4).Copy _       Worksheets("Sheet" & i).Range("A65536").End(xlUp).Offset(1)       Ret = 0      End If    Next c   End With End Sub '設定用 Private Function MatchLike(ByVal strArg As Long) As Integer Dim i As Long   'ここで設定してください。   Select Case strArg   Case Is <= 99 '以下    i = 1   Case 100 To 149 '~の間    i = 2   Case Is >= 150 '以上    i = 3   End Select   MatchLike = i End Function '-------------------------------------------------

takara_kujio
質問者

お礼

先日はどうもありがとうございました。 MatchLike っていうんですね~ VBEってすごいな~って思います。 この前の教えていただいたのを自分なりに直してやったも だめで お手上げでした。 (数を変えるだけ 笑) これから 専門用語も私なりに覚えていかなくては・・・・ 早速明日使ってみます。どうもありがとうございました~~

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

コード少なくするため、VLOOKUPのTRUE型を使ってみました。 Sheet3からSheet4,5,6へ振り分ける例でやってみました。 Sheet3のI1:J3に 0 1 100 2 150 3 を作りました。(もしかしたら100は99、150は149が正しいかも。十分テストできなかった)質問例ではテスト済み。 Sub test02() Dim l(4) '3段階区分なので4にしている d = Range("A20").End(xlUp).Row '最終データ行を第20行とする。 ' MsgBox d a = Array("sheet3", "sheet4", "Sheet5", "Sheet6") '3段階しかない場合の例、シート名 '----第1は元になるシート、その後は振り分ける段階に対応するシート名 '---書き出す各シートの第1行の1に初期化 For i = 1 To UBound(l) l(i) = 1 Next i '-----データ各行について振り分け For i = 2 To d n = Val(Worksheets(a(0)).Cells(i, "B")) m = WorksheetFunction.VLookup(n, Range("i1:j3"), 2) 'I1:J3に段階表を作る(注) '----元になるシートの行から、振り分け先のシートへセルの値をセット Worksheets(a(m)).Cells(l(m), "A") = Worksheets(a(0)).Cells(i, "A") Worksheets(a(m)).Cells(l(m), "B") = Worksheets(a(0)).Cells(i, "B") Worksheets(a(m)).Cells(l(m), "C") = Worksheets(a(0)).Cells(i, "C") 'D列は省略 l(m) = l(m) + 1 '振り分けた先のシートの次に書き込む行を1段下へ Next i End Sub 各シートのA列は書式を日付にしておいてください。

takara_kujio
質問者

お礼

<(もしかしたら100は99、150は149が正しいかも。十分テストできなかった)質問例ではテスト済み。 そうですそうです ^^;失礼しました。 早速明日会社で試して見ます。 ありがとうございました。

関連するQ&A