• ベストアンサー

VBA 抽出後、別シートにコピー

OSはXP、Excelは2003を使用しています。 下記は、元シートから新規シートにデータ全部をコピーする様に組んでいるのですが、これを利用して、A列に「3」が入力されているデータのみを抽出して新規シートにコピーするしたいです。 Dim cellgyo As Long '[元シート]で注目している行 Dim kakikomigyo As Long '[新規シート]で書き込む Dim jigyosyocode As Variant '担当事業者コード Dim tantocode As Integer '担当者コード Dim tokuisakicode As Long '得意先コード Dim tokuisakiname As String '得意先名 Dim yomicode As String '読みコード Dim postcode As String '郵便番号 Dim add1 As String '住所1 Dim add2 As String '住所2 Dim telno As String '電話番号 Dim faxno As String 'FAX番号 kakikomigyo = 3 '[新規シート]に最初に書き始める行 For cellgyo = 2 To 63335 'Forループの始まり Sheets("元シート").Select '[元シート]シートを選択/Cells(行,列) ’**** jigyosyocode = Cells(cellgyo, 1).Value tantocode = Cells(cellgyo, 5).Value tokuisakicode = Cells(cellgyo, 2).Value tokuisakiname = Cells(cellgyo, 3).Value yomicode = Cells(cellgyo, 4).Value postcode = Cells(cellgyo, 16).Value add1 = Cells(cellgyo, 17).Value add2 = Cells(cellgyo, 18).Value telno = Cells(cellgyo, 19).Value faxno = Cells(cellgyo, 20).Value If jigyosyocode = "0" Then Exit For End If Sheets("新規シート").Select Cells(kakikomigyo, 1).Value = jigyosyocode 'Cells(行,列) Cells(kakikomigyo, 2).Value = tantocode Cells(kakikomigyo, 3).Value = tokuisakicode Cells(kakikomigyo, 4).Value = tokuisakiname Cells(kakikomigyo, 5).Value = yomicode Cells(kakikomigyo, 6).Value = postcode Cells(kakikomigyo, 7).Value = add1 Cells(kakikomigyo, 8).Value = add2 Cells(kakikomigyo, 9).Value = telno Cells(kakikomigyo, 10).Value = faxno kakikomigyo = kakikomigyo + 1 Next cellgyo ----------------------- ----------------------- データを抽出しようと思い、 Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="3" Selection.CurrentRegion.Copy を ****のところに挿入してみたのですが、 どうも上手く行きません。 説明の足りないところあるかと思いますが、 どなたか修正点教えて下さいますようお願いします。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

いったん変数に代入してから新規シートに転記している一発でやっても問題ないと思います。 63335 までのforループから途中でexit for で抜けるというのは構造がきれいでないと思うので最終行を取得してからのfor nextにしています。(私はこれも好きではない) 「条件で抽出」となると反射的にFindを使うと考えないほうがいいです。 この場合全件見るわけですからその中で条件に合うときに(If Cells(行1, 1) = 3 Then) 転記をすればよろしい。 With worksheets("新規シート")から end with この間は  . (ピリオド) で始まる部分は頭にwotksheets("新規シート")がついているものと同じになります。 .cells(1,1) は worksheets("新規シート").cells(1,1) と同じ意味 =の右辺のcellsは. (ピリオド) がないのでアクティブなシートのcellということになります。 (.valueは省略可なので省略しています) 元のコードもかなり無駄があるようなので全面的に書き直しています。 Sub zz()   Dim 行1 As long  ' 元データの行カウンター   Dim 行2 As long ' 新規データの行カウンター   Dim 最終行 As Long   Sheets("元シート").Activate   最終行 = Cells(Rows.Count,1).End(xlUp).Row ’A列にデータがある最終行を取得   行2 = 2   For 行1 = 2 To 最終行     If Cells(行1, 1) = 3 Then         行2 = 行2 + 1         With wotksheets("新規シート")           .Cells(行2, 1) = Cells(行1, 1)           .Cells(行2, 2) = Cells(行1, 5)           .Cells(行2, 3) = Cells(行1, 2)           .Cells(行2, 4) = Cells(行1, 3)           .Cells(行2, 5) = Cells(行1, 4)           .Cells(行2, 6) = Cells(行1, 16)           .Cells(行2, 7) = Cells(行1, 17)           .Cells(行2, 8) = Cells(行1, 18)           .Cells(行2, 9) = Cells(行1, 19)           .Cells(行2, 10) = Cells(行1, 20)         End With     End If   Next

6338-tm
質問者

お礼

ご回答いただき、ありがとうございます。 月曜出社しましたら、抽出の仕方のところやご指摘いただきました所の修正も致しまして、 マクロを完成するように努力致します。 テキスト本の通りにしか出来ない初心者なので、無駄な所も多いです。 出来るだけ簡潔にくみたいと思っていたので、ご指摘いただき感謝しています。 最後ではありますが、お礼の書き込みが遅くなり申し訳ありませんでした。

その他の回答 (1)

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

こんばんは。 >を ****のところに挿入してみたのですが、 If Cells(cellgyo, 1).Rows.Hidden =False Then とするのですが、ここでは、SpecialCells が使えます。 なお、この手のマクロの場合は、シートのSelect やActivate を使う必要はありません。ただ、最後に、必要なら、SinkiSh.Select をしたら良いと思います。Activate は、シートを複数選択されているときに解除できませんので、この場合は、Select のほうがよいです。 '------------------------------------------- Sub TestMacro1()   'Dim i As Long '[元シート]で注目している行(使っていません)   Dim j As Long '[新規シート]で書き込む行   Dim LastRow As Long   Dim myRng As Range   Dim Rng As Range   Dim r As Variant      Dim MotoSh As Worksheet   Dim SinkiSh As Worksheet   Dim myData(0 To 9) As String 'データを入れる変数      Set MotoSh = Worksheets("元シート")   Set SinkiSh = Worksheets("新規シート")   j = 3 '[新規シート]に最初に書き始める行   '-------------------------------------------   With MotoSh     'オートフィルタ     LastRow = .Range("A65536").End(xlUp).Row     Set myRng = .Range("A1").Resize(LastRow, 20)     myRng.AutoFilter Field:=1, Criteria1:=3   End With      Set Rng = myRng.SpecialCells(xlCellTypeVisible)      Application.ScreenUpdating = False   For Each r In Rng.Rows     With r       If r.Row > 1 Then 'フィールド行は飛ばす         myData(0) = .Cells(1, 1).Value '担当事業者コード         myData(1) = .Cells(1, 5).Value '担当者コード         myData(2) = .Cells(1, 2).Value '得意先コード         myData(3) = .Cells(1, 3).Value ' 得意先名         myData(4) = .Cells(1, 4).Value '読みコード                  myData(5) = .Cells(1, 16).Value '郵便番号         myData(6) = .Cells(1, 17).Value '住所1         myData(7) = .Cells(1, 18).Value '住所2         myData(8) = .Cells(1, 19).Value '電話番号         myData(9) = .Cells(1, 20).Value 'FAX番号         SinkiSh.Cells(j, 1).Resize(, 10).Value = myData()         j = j + 1       End If     End With   Next r   MotoSh.Range("A1").AutoFilter   Application.ScreenUpdating = True      Set myRng = Nothing   Set MotoSh = Nothing   Set SinkiSh = Nothing End Sub

6338-tm
質問者

お礼

お礼の書き込みが遅くなり申し訳ありませんでした。 Wendy02さんに書いて頂いたものも、withが使われているので、 私自身、もう少しwithを使う事を頭に入れなければと勉強になりました。 今現在は「= False」や「= True」を使って組むのは全く出来ないでいるので、 月曜に実際のデータを使いながら教えて頂いた事を勉強させて頂きます。 ご回答いただき、ありがとうございました。

関連するQ&A

  • 空白セルと0値を識別させたい。(VBA)

    すみません、誰か教えていただけますか。 シートの53、54、55行目にそれぞれ値入っています。 それを3行目にビジュアル的に表現させています。 55行目はセルの色で、53行目は数値があり同じ値が 続く部分の合計を出しています。 しかし、下記の記述ですと数値が0(変数D=0)の時に うまくいきません。空白セルと認識されてしまうと思います。 何か、良い方法があれば教えて頂けませんでしょうか。 宜しくお願いします。 Sub 表示() Dim a As Long Dim c As Long Dim D As Long Dim e As String Dim f As String c = 3 For a = 3 To 64 With Worksheets("Sheet1") If .Cells(53, a) <> .Cells(53, a + 1) Then .Range(.Cells(53, c), .Cells(53, a)).Select D = WorksheetFunction.Sum(Selection) e = D f = Selection(1).Offset(1, 0).Value G = Selection(1).Offset(2, 0).Value If D <> 0 Then Selection(1).Offset(-50, 0).Value = f + "//" + e .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.Interior.ColorIndex = G End If If Selection(1).Value = "" Then .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone End If c = a + 1 End If End With Next End Sub

  • Excel VBAの繰返し処理を教えて下さい

    マクロを始めたばかりの初心者です。 どなたかご教示下さい。 リストから担当者社員番号をキーとして既定のシートにデータ転記し、別ファイルコピー後名前を付けて保存するというマクロを作成しています。 ご教示頂きたいのは、担当者別にファイルを作成したいのですが、 1行ごとの処理になり、無限ループでVBAが終了しません。 色々調べてみたものの、解決策が見つかりません。 どなたかご教示いただけないでしょうか。 読みにくいコードですが何卒よろしくお願い致します。 サンプルコード Sub 担当者用_個人用() Dim 行 As Integer Dim 年月 As String Dim メール行 As Integer Dim 担当者用 As String Dim 社員番号 As String Dim 社員名 As String Dim 残業対象 As String Dim 所属コード As String Dim 所属名 As String Dim 事業所コード As String Dim 事業所名 As String Dim 社員区分 As String Dim 平日時間外_m As String Dim 休日時間外_m As String Dim 時間外合計 As String Dim 前月時間外合計 As String Dim 前々月時間外合計 As String Dim 平均 As String Dim 問診票 As String Dim 削減書 As String Dim 担当者社員番号 As String Dim 担当者 As String Application.ScreenUpdating = False Sheets("個人用").Select 年月 = InputBox("OTレポートの「年月」を入力してください    例:(前月)2012年9月 → 201209") Range("A2") = 年月 Sheets("健康診断問診票").Select 行 = 5 メール行 = 5  【こちらの繰返し処理が無限ループになっています。ご教示頂けないでしょうか】       Do Until Cells(行, 17).Value = "" If Cells(行, 17).Value <> 担当者社員番号 Then End If 出力処理: 社員番号 = Cells(行, 1).Value 社員名 = Cells(行, 2).Value 残業対象 = Cells(行, 3).Value 所属名コード = Cells(行, 4).Value 所属名 = Cells(行, 5).Value 事業所コード = Cells(行, 6).Value 事業所名 = Cells(行, 7).Value 社員区分 = Cells(行, 8).Value 平日時間外_m = Cells(行, 9).Value 休日時間外_m = Cells(行, 10).Value 時間外合計 = Cells(行, 11).Value 前月時間外合計 = Cells(行, 12).Value 前々月時間外合計 = Cells(行, 13).Value 平均 = Cells(行, 14).Value 問診票 = Cells(行, 15).Value 削減書 = Cells(行, 16).Value 担当者社員番号 = Cells(行, 17).Value 担当者 = Cells(行, 18).Value Sheets("個人用").Select Range("A5").Select Cells(メール行, 1).Value = 社員番号 Cells(メール行, 2).Value = 社員名 Cells(メール行, 3).Value = 残業対象 Cells(メール行, 4).Value = 所属名コード Cells(メール行, 5).Value = 所属名 Cells(メール行, 6).Value = 事業所コード Cells(メール行, 7).Value = 事業所名 Cells(メール行, 8).Value = 社員区分 Cells(メール行, 9).Value = 平日時間外_m Cells(メール行, 10).Value = 休日時間外_m Cells(メール行, 11).Value = 時間外合計 Cells(メール行, 12).Value = 前月時間外合計 Cells(メール行, 13).Value = 前々月時間外合計 Cells(メール行, 14).Value = 平均 Cells(メール行, 15).Value = 問診票 Cells(メール行, 16).Value = 削減書 Cells(メール行, 17).Value = 担当者社員番号 Cells(メール行, 18).Value = 担当者 '個別ファイル作成 Sheets("個人用").Select Sheets("個人用").Copy 年月 = Cells(2, "A") 担当者社員番号 = Cells(5, "Q") 担当者 = Cells(5, "R") Application.DisplayAlerts = False 'メッセージを出さない ActiveWorkbook.SaveAs Filename:="C:\担当者用\" & ("勤怠抽出" & 年月 & "(" & 担当者社員番号 & " " & 担当者 & "さん" & ")") & ".xls" ActiveWorkbook.Save ActiveWindow.Close Sheets("個人用").Select Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Sheets("健康診断問診票").Select 行の終わり: 行 = 行 + 1 Loop Sheets("ファイル作成").Select Range("A30").Select ActiveWorkbook.Save Application.ScreenUpdating = True MsgBox "ファイル作成が終了しました" End Sub

  • VBA 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

  • VBAトラブル

    Sub 百人一首一番から二十番() Dim hyakuSh As Worksheet Dim mySh As Worksheet Set mySh = Worksheets("百人一首クイズ") Set hyakuSh = Worksheets("百人一首") Dim myRow As Integer Randomize myRow = Int((21 - 2 + 1) * Rnd + 2) Dim kaminoku As String Dim kaminoku2 As String Dim kaminoku3 As String Dim simonoku As String Dim simonoku1 As String Dim sakusha As String kaminoku = hyakuSh.Cells(myRow, 3).Value kaminoku2 = hyakuSh.Cells(myRow, 4).Value kaminoku3 = hyakuSh.Cells(myRow, 5).Value shimonoku = hyakuSh.Cells(myRow, 6).Value shimonoku1 = hyakuSh.Cells(myRow, 7).Value sakusha = hyakuSh.Cells(myRow, 8).Value mySh.Activate mySh.Shapes("Text Box 2").Select Selection.Characters.Text = kaminoku & Chr(10) & kaminoku2 & Chr(10) & kaminoku3 Dim MyTBox As Integer Dim smRow As Integer Dim smRow2 As Integer Dim smRow3 As Integer Dim smRow4 As Integer Dim smRow5 As Integer Dim i As Integer mySh.Shapes(2).Select Randomize smRow5 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow5, 6).Value & Chr(10) & hyakuSh.Cells(smRow5, 7).Value & Chr(10) & hyakuSh.Cells(smRow5, 8).Value mySh.Shapes(3).Select Randomize smRow = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow, 6).Value & Chr(10) & hyakuSh.Cells(smRow, 7).Value & Chr(10) & hyakuSh.Cells(smRow, 8).Value mySh.Shapes(4).Select Randomize smRow2 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow2, 6).Value & Chr(10) & hyakuSh.Cells(smRow2, 7).Value & Chr(10) & hyakuSh.Cells(smRow2, 8).Value mySh.Shapes(5).Select Randomize smRow3 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow3, 6).Value & Chr(10) & hyakuSh.Cells(smRow3, 7).Value & Chr(10) & hyakuSh.Cells(smRow3, 8).Value mySh.Shapes(6).Select Randomize smRow4 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow4, 6).Value & Chr(10) & hyakuSh.Cells(smRow4, 7).Value & Chr(10) & hyakuSh.Cells(smRow4, 8).Value Randomize MyTBox = Int((6 - 2 + 1) * Rnd + 2) mySh.Shapes(MyTBox).Select Selection.Characters.Text = shimonoku & Chr(10) & shimonoku1 & Chr(10) & sakusha mySh.Shapes("Text Box 2").Select Dim Ans As Integer Ans = InputBox(hyakuSh.Cells(myRow, 3).Value & hyakuSh.Cells(myRow, 4).Value & hyakuSh.Cells(myRow, 5).Value & Chr(10) & Chr(10) & "下の句を番号で答えなさい", Title:="百人一首", Xpos:=7500, Ypos:=2500) If Ans = MyTBox Then MsgBox " 正解!!! V(・ o ・)V " Else MsgBox ("間違いです!!!!!!!!" & Chr(10) & Chr(10) & hyakuSh.Cells(myRow, 6).Value & hyakuSh.Cells(myRow, 7).Value & Chr(10) & Chr(10) & sakusha & "です") End If End Sub 以上のマクロをエクセルで作ったのですが、VBE~マクロを走らせると順調に走るのですが、マクロをボタンに登録すると、Inputbox に解答を掘り込んであげないと、kaminokuもshimonokuもあたらしいものになりません 今マクロはシート上にあります、マクロを標準モジュールに移しても同じ結果です。何か解決策はありますか? かなり古くエクセル2000です、初心者なので難しいこことはわかりませんが、よろしくお願いします。

  • VBA超初心者です

    皆さんのお知恵を拝借させてください。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/12/1 ユーザー名 : 101 ' Dim pearend As Integer Dim code As Integer Dim codeend As Integer Dim sheet_name As String Dim dayend As Date Sheets("商品名").Select Range("A4").Select Selection.End(xlDown).Select pearend = Selection.Row() For l = 4 To pearend Step 2 For r = 2 To 3 Cells(l, r).Select code = Cells(l, r).Value Select Case code Case 1000 To 1999 sheet_name = "1000" Case 2000 To 2999 sheet_name = "2000" Case 3000 To 3999 ssheet_name = "3000" Case 4000 To 4999 sheet_name = "4000" Case 5000 To 5999 sheet_name = "5000" End Select Sheets(sheet_name).Select Range("B4").Select Selection.End(xlToRight).Select codeend = Selection.Column() Range("A5").Select Selection.End(xlDown).Select dayend = Selection.Row() For i = 2 To codeend If code = Cells(4, i).Value Then Range(Cells(dayend, i), Cells(5, i)).Select Selection.Copy Sheets("商品名").Select Range("K3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If Next Next Next End Sub というマクロをつくってみたのですが、何順目かあたりから For r = 2 To 3 のrがなぜか4になっています。正直知識がないのでさっぱりわかりません。どこに問題があるか詳しい方教えてください。

  • EXCEL VBA データのある範囲の特定が悪い?  

    アンケート調査票を簡単につくために、下のようなマクロを教えていただいたのですが、もとデータ項目の参照範囲がセルのB5より上にあるもの(空白の場合も)も項目としてしまっているようなので、どこを手直しすればいいのか、すみませんが教えてください。 Sub test() '定数の設定 Const strInputSheet As String = "Sheet1" Const lngInputRow As Long = 5 Const lngInputCol As Long = 2 Const strOutputSheet As String = "Sheet2" Const lngOutputCol As Long = 3 Const lngOutputRow As Long = 4 Const strMessageA As String = " は " Const strMessageB As String = " に対してどの位影響があると思いますか?" '定義 Dim lngMaxRow As Long Dim lngCountA As Long Dim lngCountB As Long Dim strA As String Dim strB As String Dim lngRow As Long '項目数を把握 Sheets(strInputSheet).Select Cells(ActiveSheet.Rows.Count, lngInputCol).Select Selection.End(xlUp).Select lngMaxRow = Selection.Row 'B列のデータ最終行を取得 lngRow = lngOutputRow '出力開始行の設定 '項目Aをなめる For lngCountA = lngInputRow To lngMaxRow  strA = Cells(lngCountA, lngInputCol).Value '項目Aの取得  '項目Bをなめる  For lngCountB = 1 To lngMaxRow   If lngCountA <> lngCountB Then '項目Aと項目Bが同じときはここは処理しない    strB = Cells(lngCountB, lngInputCol).Value '項目Bを取得    Sheets(strOutputSheet).Cells(lngRow, lngOutputCol).Value = strA & strMessageA & strB & strMessageB '文字列を結合    lngRow = lngRow + 1 '改行する   End If  Next lngCountB Next lngCountA End Sub

  • VBAでハイパーリンクをつける

    仕事で画像のファイル名をExcelに書き出し、書き出しものにハイパーリンクで見がうまくいきません。下記のものです。どこが悪いのでしょうか? Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim 貼付行 As Integer Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" フォルダ = "分析" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" ファイル名 = Dir(パス & 拡張子) 貼付行 = 0 Do While ファイル名 <> "" 貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名 ファイル名 = Dir() Loop End Sub 実行すると初めの一行だけリンクができ後は一行もできません。よろしくお願い致します。

  • VBA 実行時エラー1004(その2)

    毎度お世話になっております。 シート「sheet2」のA列のリスト内容を、シート「M_得意先」のリストからVLOOKUPして、指定のセルに書き出していくというコードを作成してみたのですが、VLOOKUPを実行する段階でエラーが出てしまいます。 少し変更して、同一シート内でのVLOOKUPは問題なく実行できたのですが...原因をご存知の方教えてください。 Dim b As String Dim endRcell2 As Long Dim cnt10 As long Sheets("sheet2").Select Sheets("sheet2").Range("A1").CurrentRegion.Select 'データ全体選択 Selection.SpecialCells(xlCellTypeLastCell).Select '最終行検出 endRcell2 = ActiveCell.Row cnt10 = 2 Do ↓実行時エラー1004が出る行 b = Application.WorksheetFunction.VLookup(Sheets("Sheet2").Range("A" & cnt10).Value, Sheets("M_得意先").Range(Cells(1, 1), Cells(endRcell, 2)), 2, False) ↑実行時エラー1004が出る行 Sheets("sheet2").Range("E" & cnt10).Value = b cnt10 = cnt10 + 1 Loop Until cnt10 = endRcell2

  • VBA シート間の単一セルから結合セルへのコピー

    マクロについてご教授をお願いします。 ◆実現したい事 2枚のシート(XとY)が存在します。 コピー元:Xシート          コピー先:Yシート    B列                    B列 1行 商品1   コピペ→     1~3行結合 商品1  2行 商品2   コピペ→     4~5行結合 商品2 3行 商品3   コピペ→     6~8行結合 商品3   ・                    ・   ・                    ・   ・                    ・  最終行                  最終行 XシートのB列に1行ずつ、商品名が羅列されています。 YシートのB列には、3行結合(B1:B3)、(B4:B6)、(B7:B9)・・・空白セルがあります。 Xシートの商品名をYシートの結合セルにマクロを使って処理したいです。 ◆試した事 (1)結合を解除し、XからYへ範囲コピーしたが、YのB列に再び、商品毎に2行追加し、結合  2行追加する方法がわからず断念 (2).valueでXシートB1 = YシートB1を試みるができない ◆ここで詰まってます>< Dim X As Worksheet Dim Y As Worksheet Dim 最終行1 As Long Dim 最終行2 As Long Dim cp1 As Long・・・・Yシート行変数 Dim cp2 As Long・・・・Xシート行変数 Set X = Worksheets(1) Set Y = Worksheets(2) 最終行1 = Cells(Rows.Count, 2).End(xlDown).row 最終行2 = Cells(Rows.Count, 2).End(xlDown).row For cp1 = 1 To 最終行1 For cp2 = 1 To 最終行2 Step 3 sh1.Cells(cp1, 2).Copy Destination:= sh2.Cells(cp2, 2) Next Next みたいな感じにできればと、Copyを.valueなどにしてみたりと試してみましたが、 なかなかうまくいかず、3日くらい悩んでいます。 シンプルにやりたいのですが、なにか良い方法などあれば、 ご教授のほどお願い致します><

  • 条件によってシート別に振り分けるには?

    いつもお世話になっております。 条件によって、各シートへデータを行ごと振り分ける作業をしたいのですが、うまく行かず困っております。 最初に全データが格納されている「1」というシートがあります。 最初にA列の前に1列追加し、B列に入っているデータで、「HA:」「HB:」「HC:」と頭についていれば、A列に「H」を入力。別のシート(例としてシート名をHAPPYとします)を作成し、「H」が入ったデータを行ごと「HAPPY」のシートへ移動、「1」からは削除します。 「1」のシートへ戻り、今度は「LA:」「LB:」「LC:」を検索、別シートを作成(例:LUCKY)、行移動、「1」から削除。「NA:」「NB:」「NC:」を検索、別シートを作成(例:NICE)、行移動、「1」から削除。 該当しなかったデータはそのままにします。 オートフィルターだと2つまでしかソートができないため、今は下記のように検索するようにしておりますが、データ入力がきちんとできていない事が発生し、(HA:ではなく、A:など、かけてしまっている)本来ならシート「1」に残したいのに「HAPPY」のシートに含まれる事になってしまいます。 マクロは下記のとおりです。(Hを判別するまでを記載しました) Sub test() Columns("A:A").Insert shift:=xlToRight Dim happya As Range Dim happyb As Variant Dim happyc As Integer happyb = "HA:HB:HC:" Set happya = Cells(65536,2).End(xlUp).Offset(1,0) While happya.Row > 1 Set happya = happya.Offset(-1,0) happyc = happya.Row If(Not(IsNumeric(happya.Value)))And(InStr(happyb,Left(happya.Value,1))>0)Then Cells(happyc,1).Value = "H" End If Wend With Sheets.Add Sheets("Sheet1").Select Sheets("Sheet1").Name = "HAPPY" Sheets("1").Select Selection.AutoFilter Field:=1, Criteria1:="H",Operator:=xlAnd Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Sheets("HAPPY").Select Rows("1:1").Select ActiveSheet.Paste Columns("A:A").Delete shift:=xlToLeft With Sheets("1").Select Application.CutCopyMode = False Selection.AutoFilter End With Dim mydow As Long Range("A1").Select For mydow = Cells(Rows.Count,1).End(xlUp).Row To 2 Step -1 With Cells(mydow,1) If .Value Like "H" Then.EntireRow.Delete End With Next End Sub 以上、よろしくお願いいたします。 環境はWindowsXP Excel2003です。

専門家に質問してみよう