- ベストアンサー
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 へ 値だけを貼り付けできないでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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 '-------------------------------------------------
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
コード少なくするため、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列は書式を日付にしておいてください。
お礼
<(もしかしたら100は99、150は149が正しいかも。十分テストできなかった)質問例ではテスト済み。 そうですそうです ^^;失礼しました。 早速明日会社で試して見ます。 ありがとうございました。
お礼
先日はどうもありがとうございました。 MatchLike っていうんですね~ VBEってすごいな~って思います。 この前の教えていただいたのを自分なりに直してやったも だめで お手上げでした。 (数を変えるだけ 笑) これから 専門用語も私なりに覚えていかなくては・・・・ 早速明日使ってみます。どうもありがとうございました~~