
前処理として、別のファイルから同じ名称の値がある時、行の最後(一行目であれば"I3")に"正常"と書き込む処理を施しています。
上記もFor文にて作成したのですが、その後に"正常"と「書き込まれていない」行を全選択し、その都度別Sheetsにコピーしていくコードをご教授願えないでしょうか?
下記にはお恥ずかしいながら現在考えているコードになります。
Dim seijourow As Long
Dim rng As Range
Dim k As long
ThisWorkbook.Sheets("2").Active
ThisWorkbook.Sheets("2").select
ThisWorkbook.Sheets("2").Range("A3").select
ThisWorkbook.Sheets("2").Range(Selection.Selection.End(xlToRight)).Select
iCnt = Selection.Count
For seijourow = 1 To iCnt
If ThisWorkbook.Sheets("2").Cells(2, seijougyou + 9).Value <> "正常" Then
rng = ThisWorkbook.Sheets("2").UsedRange.Rows(seijourow)
ThisWorkbook.Sheets("2").Rows(rng).Copy (ThisWorkbook.Sheets("1").Rows(k))
k = k + 1
Exit For
End If
Next
No.3ベストアンサー
- 回答日時:
補足を読むと
>その後に"正常"と「書き込まれていない」行を全選択し、その都度別Sheetsにコピーしてい
選択・・の解釈が良く分かりませんでしたが・・・
出力範囲全てに対してI列を検証して<> "正常"以外を対象に範囲をSheets("Sheet1")にコピペするで良かったのかな・・
でしたら、
出力先行が常に2行目からで決め打ちなら変数kの初期値を2として処理ごとに1を加算・・・
Selectionでなく I3セルからI列の値のある最終行までをForすれば良いのでこんな感じですかね
Dim seijourow As Long
Dim k As Long: k = 2 '2行目
With ThisWorkbook.Sheets("Sheet2")
For seijourow = 3 To .Cells(Rows.Count, "I").End(xlUp).Row
If .Cells(seijourow, "I").Value <> "正常" Then
.Range(.Cells(seijourow, "A"), .Cells(seijourow, "I")).Copy Sheets("Sheet1").Cells(k, "A")
k = k + 1
End If
Next
End With
またもや補足と入違ってしまいました。。。
今しがた補足した内容でも不足していれば遠慮なくおっしゃってください。
回答ありがとうございます。
No.4
- 回答日時:
>("正常"なのか"異常"なのか
>その後、Sheet2のI列が"異常"の行をSheet1のA2から下に一行ずつコピーしていければと考えています。
不足の情報は無いかと・・・#3のコードは検証されましたか?
#2についてはあらかじめ行を選択する必要があります
追加回答のついでですが・・
>Sheet2のI列に入力してくれるようなループ文は作成いたしました。
この処理の段階でSheet1にも出力すれば良いと思いますよ
まぁ、その後・・とあるので間に手作業などがあるのかもしれませんね。。
No.2
- 回答日時:
こんにちは
ご質問とコードを拝見して混乱しています。
行と列を混同していませんか?
>行の最後(一行目であれば"I3")に"正常"と書き込む処理を施しています。
と言う事であれば、"正常"を探す範囲は I列になると思われます
従って 一行の場合、For を使う必要はないような気がします
複数行を選択している場合は必要になると思いますが・・
ThisWorkbook.Sheets("2").Range(Selection.Selection.End(xlToRight)).Select タイプミスと思われますが・・
ThisWorkbook.Sheets("2").Range(Selection,Selection.End(xlToRight)).Select
ただ、>行を全選択し、ならば列の数を取得する意味はなさそうですね
探す部分(比較分岐)
(変数seijougyouが何かなのは不問で)
If ThisWorkbook.Sheets("2").Cells(2, seijougyou + 9).Value <> "正常"
は
If ThisWorkbook.Sheets("2").Cells( seijougyou +2, 9).Value <> "正常"
となるのではないかと思います(複数行選択の場合)
rng = ThisWorkbook.Sheets("2").UsedRange.Rows(seijourow)
については
Dim rng As Range なので set が必要です
また、使用する所
ThisWorkbook.Sheets("2").Rows(rng).Copy については
ThisWorkbook.Sheets("2").rng.Copy で
シート名2の使われている範囲のseijourow行の範囲がコピーされます
例:
シート名2のシートで 複数行選択している状態で
選択範囲のI列に"正常" の入力が無い行(最終列迄の範囲)をコピーして
シート名1のシートの最終行(A列の最後の使われている行)の下の行に
ペーストする と言うようなコード例です。。
Dim seijourow As Long
Dim rng As Range
Dim k As Long
With ThisWorkbook.Sheets("2")
For seijourow = Selection(1).Row To Selection(1).Row + Selection.Rows.Count - 1
If .Cells(seijourow, "I").Value <> "正常" Then
Set rng = .UsedRange.Rows(seijourow)
k = ThisWorkbook.Sheets("1").Cells(Rows.Count, 1).End(xlUp).Offset(1).Row
rng.Copy ThisWorkbook.Sheets("1").Rows(k)
End If
Next
End With
ご指摘ありがとうございます。
ちょうど補足を記入しているときにいただいてしまったので、不足しておりました。
>一行の場合、For を使う必要はないような気がします
>複数行を選択している場合は必要になると思いますが・・
こちらは複数行前提で考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) 列の最終行に新たに入力されたらその値を自動参照 1 2023/01/21 09:59
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
VBAでループ内で使う変数名を可...
-
月度は何て読みますか?
-
VBの質問#if 0 then ってどう...
-
VBAでCOPYを繰り返すと、処理が...
-
switch の範囲指定
-
インタラクティブの反対語は?
-
DoEventsがやはり分からない
-
メルカリのメルカードで買い物...
-
リョウ・・・量?料?
-
Loadイベント中にほかのイベン...
-
お家デートをしててハグを長い...
-
EXCEL2003 VBAで2つのDBに接続...
-
ハードウェア処理とソフトウェ...
-
取り消し線が入った文字を削除...
-
Do~Loopした回数をカウントしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
Do~Loopした回数をカウントしたい
-
VBAでCOPYを繰り返すと、処理が...
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
リョウ・・・量?料?
-
vba 空のデータをSplitする時の...
-
findは動くがfindnextがマクロ...
おすすめ情報
Sheet2からSheet1にコピーしたいです。
正常"と書き込まれる列はI列になります(一件目だとすると"I3")。
コピー先の開始行はSheet1の2行目からになります。
例として、I4セルが"異常"だとしますと、Sheet1の"A4"~"I4"までの列をSheet1の"A2"~"I2"にコピーしていきたいです。
ほかに説明不足な点やわかりにくい部分があれば補足いたします。
>前処理として、別のファイルから同じ名称の値がある時、行の最後(一行目であれば"I3")に"正常"と>書き込む処理を施しています。
こちらの前処理の詳細なのですが、
Sheet2に最初からテーブルがいくつかあり、そのテーブルの特定のセルの値が別ファイル(こちらも複数件)の特定のセルの値と一致した場合に、別ファイルのC列の結果をSheet2のI列に入力してくれるようなループ文は作成いたしました。
そしてその別ファイルのC列の値("正常"なのか"異常"なのか)をI列に入れていくイメージです。
その後、Sheet2のI列が"異常"の行をSheet1のA2から下に一行ずつコピーしていければと考えています。