初めまして、よろしくお願いします。
次のような二枚のシートがあります
シート1
A B C
1
2
・
99
100 23
101 25
102 31
103 34
104 43
105 44
106 49
107 50
108 55
109 60
110
111
・
・
シート2
A B C
1
2
・
99
100 23 1 2 3
101 25 4 5 6
102 31 7 8 9
103 34 0 1 2
104 43 3 4 5
105 44 6 7 8
106 49 9 0 1
107 50 2 3 4
108 55 5 6 7
109 60 8 9 0
110
111
・
・
シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。
のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、
シート1
A B C
1
2
・
99
100 5
101 23
102 25
103 34
104 43
105 44
106 49
107 50
108 51
109 55
110 60
111
112
・
・
マクロを実行すると
シート2
A B C
1
2
・
99
100 5
101 23 1 2 3
102 25 4 5 6
103 34 0 1 2
104 43 3 4 5
105 44 6 7 8
106 49 9 0 1
107 50 2 3 4
108 51
109 55 5 6 7
110 60 8 9 0
111
112
・
・
シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。
No.6ベストアンサー
- 回答日時:
No.1・3・4です!
何度もごめんなさい。
ごく単純に・・・
行削除のあとすぐに行挿入し、Sheet1のA100~A199 セルをSheet2にそのままコピー&ペーストだと間違いがないかもしれません。
Sub test3()
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Application.ScreenUpdating = False
For j = 199 To 100 Step -1
For i = 100 To 199
If WorksheetFunction.CountIf(Range(ws1.Cells(100, 1), ws1.Cells(199, 1)), ws2.Cells(j, 1)) = 0 Then
ws2.Rows(j).Delete
ws2.Rows(j).Insert
End If
Next i
Next j
Application.ScreenUpdating = True
Range(ws1.Cells(100, 1), ws1.Cells(199, 1)).Copy Destination:=ws2.Cells(100, 1)
End Sub
こんなんではどうでしょうか?m(_ _)m
何度も修正回答いただきありがとうございます。こちらのやり方で、うまくできました。大変助かりました。お付き合いいただき、ありがとうございます。
No.5
- 回答日時:
また後出しの「じつは…」あるとダメかもしれません。
Sub macro1()
On Error Resume Next
With Worksheets("Sheet1").Range("B100:D199")
.Formula = "=IF(VLOOKUP($A100,Sheet2!$A$100:$D$199,COLUMN(),FALSE)<>"""",VLOOKUP($A100,Sheet2!$A$100:$D$199,COLUMN(),FALSE),NA())"
.SpecialCells(xlCellTypeFormulas, xlErrors).ClearContents
.Value = .Value
Worksheets("Sheet1").Range("A100:D199").Copy Destination:=Worksheets("Sheet2").Range("A100")
.ClearContents
End With
End Sub
No.4
- 回答日時:
No.1・3です!
たびたびごめんなさい。
投稿した後で気づいたのですが、コード内にCOUNTIF関数を使っていて、検索範囲が列全体になっています。
200行目以降に100~199行にあるデータと一致するものがある場合は希望通りの動きにならないと思います。
そこでもう一度コードを訂正したものを載せておきます。
Sub test2()
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Application.ScreenUpdating = False
For j = 199 To 100 Step -1
For i = 100 To 199
If WorksheetFunction.CountIf(Range(ws1.Cells(100, 1), ws1.Cells(199, 1)), ws2.Cells(j, 1)) = 0 Then
ws2.Rows(j).Delete
End If
If ws1.Cells(i, 1) < ws2.Cells(j, 1) And ws1.Cells(i, 1) > ws2.Cells(j - 1, 1) Then
ws2.Rows(j).Insert
ws2.Cells(j, 1) = ws1.Cells(i, 1)
End If
Next i
Next j
Application.ScreenUpdating = True
End Sub
※ ちゃんと希望通りに動くことを期待しています。
何度も失礼しました。m(_ _)m
回答ありがとうございます。こちらのやり方で範囲指定は満足できましたが、やはり行番200以降のデーターと、なぜだか頭の行番の通し番号、例では23が後尾についてしまうのは残念です。
No.3
- 回答日時:
No.1です!
補足を読ませてもらいました。
前回のコードは100行目~最終行まで!としていますので、希望通りにならなかったようですね!
前回のコードをそのまま利用する場合は2行だけの変更で大丈夫だと思います。
100~199行の間での操作だとすると、
各Sheetの最終行の部分を 199 に訂正すればOKかと思います。
>For j = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 100 Step -1
>For i = 100 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
の行を
それぞれ
>For j = 199 To 100 Step -1
>For i = 100 To 199
としてみてください。
これで何とか希望通りの動きにならないでしょうか?m(_ _)m
補足の回答ありがとうございます。こちらのお願い通りに行範囲はできました。
ただ、この変更では追加分が後尾につき、行番200以降に入力されているデーターがこちらも後尾まで移動してしまうのが残念です。こちらのわがままに付き合っていただき、ありがとうございます。
No.2
- 回答日時:
こんなのはVBAでやる理由は無いのでは。
手入力と、並べ替えと行削除操作で出来るのでは。VBAでやらなければならない理由は?
ーー
既出の回答のお礼を見ても、ただやって見て、結果が思い通りでした、を見るだけで、回答の処理のロジック(手順)の理解など出来てないのでは。少しぐらい変更できるレベルで無いと、質問して、回答をもらっても無駄では。
それで少し内容が追加・変更されると、追加質問になる。
例の挙げ方も不自然。左端の番号は行番号かデータなのか明示のこと。
何がしたいのかよくわからない。>行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加される、のは、どういう理由で102や5や51などが出てきたのか?
ーー
削除で言えば
Sub test06()
x = InputBox("削除する番号")
r = Range("a:a").Find(x).Row
Rows(r).EntireRow.Delete
End Sub
という方法も在る。全行下から、削除する番号を探していく既回答とは別の方法。
追加は最下行の下行に追加データをVBAで入力し(しかしプログラムでデータ入力は、追加行が多数あれば、Inputboxやコードの中に書き込む方法とは別の他の方法を考える必要がある。)ソートすればよいのでは。
シート1とシート2は、そのデータ内容で追加や削除について、何か関連させるのかな。
No.1
- 回答日時:
こんにちは!
一例です。
データは両Sheet共、100行目からとしています。
標準モジュールにコピー&ペーストしてマクロを試してみてください。
Sub test()
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
For j = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 100 Step -1
For i = 100 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(ws1.Columns(1), ws2.Cells(j, 1)) = 0 Then
ws2.Rows(j).Delete
End If
If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, 1)) = 0 And _
ws1.Cells(i, 1) <> "" And ws1.Cells(i, 1) < ws2.Cells(j, 1) And _
ws1.Cells(i, 1) > ws2.Cells(j - 1, 1) Then
ws2.Rows(j).Insert
ws2.Cells(j, 1) = ws1.Cells(i, 1)
End If
Next i
Next j
End Sub
こんな感じではどうでしょうか?m(__)m
この回答への補足
お礼の説明の、さらに補足です。シート1とシート2のどちらのシートにも行番200番以降から、別のデーターが入力されています。
大変失礼しました。解る方、よろしくお願いします。
回答ありがとうございます。回答いただきました内容でうまくできました。しかしもしよろしければですが、こちらの説明不足で行番200から別のデーターが入力されているために、行番200番前まで、できればマクロ実行後に200番以降の行にデーターが入力されている行位置がマクロ実行前と同じ位置になっていればありがたいです。わがまま言って申し訳ありません。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タイムスタンプとテキストから...
-
エクセルの文字が途中から消える
-
エクセルの質問です。 F列からL...
-
ワークシートに出現したこの画...
-
Excelの警告について
-
EXCELの散布図で日付が1900年に...
-
エクセルでファイルの最終更新...
-
Excelでの文字色
-
マクロの処理が遅くなった
-
シートの情報を別のシートへま...
-
OFFSET関数を使用したいのです...
-
エクセルの数式バーのフォント...
-
エクセルデーターから必要な項...
-
Excelについて教えてください。...
-
SUBTOTALは、参照された数字で...
-
エクセルの「条件付き書式」を...
-
Excelの関数について このよう...
-
エクセル。金額から「円」を除...
-
Excelの数字の前に入っている空...
-
エクセルの問題です。絶対値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報