エクセルVBA2013で質問です。
C3:I3セルが結合してあり日付が入っています。
同じくJ3:P3も結合してあり日付が入っています。
同じように1週間分隣も続いています。
下側は作業者毎の表になっています。
C3:I3を月曜とすると、その下のC4:I17に作業者Aの月曜日分の内容、
C19:I32が作業者Bの火曜日分の内容となっています。
これを、日付セルを選択して、VBAを実行して各作業者の内容をコピーしてよそに貼り付けるのですが、
例えば、月曜の作業者Aの内容コピーなら、
ActiveCell.Offset(1, 0).Resize(14, 7).COPY
でコピーできまていますが、各作業者の内容を増やすことがあります。
作業者Aの内容は4行目から17行目までを最初ありますが、これを増やしたり場合によっては減らしたりして17が20行目までとなったりします。
例えば、20行目まで増やしたとすると、作業者Aの月曜日分は、C4:I20までになります。以下、作業者Bの位置もずれます。
名前を定義して指定すれば、増やしても減らしても追従するのかな?と思いましたがどうすればよいかよく分かりません。
名前の定義も各作業者の各曜日で定義する必要があるのか、それとも作業者の項目で定義して、
ActiveCell.Offset("作業者A",0).Resize("作業者A", 7).COPY
のような行のみ名前で指定でできないのかな?とも思いました。
上のは動きませんでしたが・・・。
行を増やしたり減らしたりしてもうまく追従してくれるやり方が何かいい方法がありますか?
No.1ベストアンサー
- 回答日時:
準備:
4行から17行までの「行範囲」にまとめて「作業者A」と名前を定義する。
手順:
application.intersect(activecell.mergearea.entirecolumn, range("作業者A")).copy
のようにして範囲を指定する。
>行を増やしたり減らしたりしてもうまく追従してくれるやり方が何かいい方法
行を増やした減らしたと「言葉で言ってる」だけじゃなく、具体的にいま対象の範囲がどこからどこまでなのか、あなたのエクセルで「いま調べる方法」を考えて次からもっと工夫してください。
たとえばA列がこれこれになってる範囲が作業者一人分の範囲だとか。
たとえば3行目が日付でセル結合されているとして、次に同じようにセル結合されてる18行目や19行目までの範囲がヒトカタマリになるとか。
No.4
- 回答日時:
No2のまた訂正と補足です。
訂正
もし質問のように作業者Aと作業者Bの行数が同じになるのでしたらbは求めなくてよくて
↓
もし質問のように作業者Aと作業者Bの行数が同じになるのでしたらbは一度だけ求めればよくて
あと補足として
もとがCopyを使っていたので
ActiveCell.Offset(1, 0).Resize(BottomRow - FastRow, 7).Copy
Sheets("Sheet2").Cells(FastRow, "C").PasteSpecial
にしましたが、以下のほうが比較にならないくらい早いです。
Sheets("Sheet2").Cells(FastRow, "C").Resize(BottomRow - FastRow + 1, 7).Value = ActiveCell.Offset(1, 0).Resize(BottomRow - FastRow + 1, 7).Value
なお、ActiveCellを利用しているので実行時に本来のセルを選択してるかどうかのチェックは一番最初にしておかないととんでもないことになります。
No.2
- 回答日時:
> C3:I3を月曜とすると、その下のC4:I17に作業者Aの月曜日分の内容、
> C19:I32が作業者Bの火曜日分の内容となっています。
上は作業者Aの月曜日分で下は作業者Bの火曜日分ですか?この辺がよくわかりませんが、とりあえず作業者Aと作業者Bの間にだけ空白(何もデータが入ってない)の行があるとして考えてみました。で、空白の行を探すということで、ActiveCellを移動しながら
ActiveCell.Offset(1, 0).Resize(b, 7).COPY
で、bを求めればいいわけですよね。もし質問のように作業者Aと作業者Bの行数が同じになるのでしたらbは求めなくてよくてActiveCellを移動だけすればいいことになります。
とりあえず、空白の行を探しActiveCellを移動しbを求めるということで速度は遅いですが、参考までに
Sub Example()
Dim i As Long, TopRow As Long, BottomRow As Long, FastRow As Long, LastRow As Long
Dim m_Column As Long
Application.ScreenUpdating = False
FastRow = ActiveCell.Offset(1, 0).Row
LastRow = ActiveCell.SpecialCells(xlLastCell).Row
m_Column = ActiveCell.Column
For i = 1 To 2
Call CopyPaste(FastRow, LastRow, m_Column)
Next i
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub
Private Sub CopyPaste(ByRef FastRow As Long, ByRef LastRow As Long, ByVal m_Column As Long)
Dim i As Long, BottomRow As Long
BottomRow = LastRow
For i = FastRow To LastRow
If Cells(i, m_Column) = "" Then
BottomRow = i
Exit For
End If
Next i
ActiveCell.Offset(1, 0).Resize(BottomRow - FastRow, 7).Copy
Sheets("Sheet2").Cells(FastRow, "C").PasteSpecial
'貼り付け先は不明なのでとりあえすSheet2にしています。
Cells(BottomRow, m_Column).Activate
FastRow = BottomRow + 1
End Sub
この回答への補足
> C3:I3を月曜とすると、その下のC4:I17に作業者Aの月曜日分の内容、
> C19:I32が作業者Bの火曜日分の内容となっています。
火曜→月曜の間違いでした。火曜日分はJ:P列でした。
試してみました。空白行を探すのですが、このやり方だと内容を隙間を開けて入力していると必要な所まで取得できませんでした。
NO1さんのやり方を試したところうまくできました。
でも参考になりました。どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- サーバー メールサーバーについて詳しい方、メールサーバーの管理業務経験のある方、教えてください。 3 2022/11/12 18:24
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- 財務・会計・経理 業者間での注文書・請書の取り扱いについて 2 2022/06/27 15:53
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- 派遣社員・契約社員 製造関連の派遣で働いてます。朝は9時からで定時が17時30なのですがその日残業かどうかは急に決まり定 4 2022/09/26 08:07
- その他(法律) 就業規則変更後の周知義務について 7 2022/05/23 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで連続データから、数...
-
エクセルの画面で十字マークが...
-
excelで、スクロールをすると限...
-
セルをクリックすると付箋のよ...
-
エクセルでハイパーリンクのU...
-
EXCEL アルファベットと数字の...
-
エクセル 数値を全て「1」にす...
-
複数のセルの入力内容を一度に...
-
エクセルでカーソルが四方に矢...
-
エクセルVBAでセル範囲のデータ...
-
Excelで表のデータを並び替えた...
-
エクセルで1つおきに列を削除...
-
ピポットテーブルエラー解決方法
-
Excel選択を繰り返すとセルの色...
-
エクセルで0を除いて昇順に並...
-
エクセルの行数の制限
-
エクセル2016の特定の文字列を...
-
エクセルVBAリストボックスに表...
-
Excelの複数セル選択は、なぜ一...
-
初旬/中旬/下旬の並べ替え
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの画面で十字マークが...
-
excelで、スクロールをすると限...
-
エクセルで連続データから、数...
-
セルをクリックすると付箋のよ...
-
複数のセルの入力内容を一度に...
-
EXCEL アルファベットと数字の...
-
エクセルでハイパーリンクのU...
-
エクセル 数値を全て「1」にす...
-
Excelで表のデータを並び替えた...
-
エクセル 画面上の行数を調節...
-
Excel選択を繰り返すとセルの色...
-
エクセルでカーソルが四方に矢...
-
Shift押しながら、矢印ボタンで...
-
エクセルVBAでセル範囲のデータ...
-
エクセルで0を除いて昇順に並...
-
Excelで急に動かなくなる
-
エクセルの複数セルに同時に同...
-
フィルタを解除した後の表示位置
-
ピポットテーブルエラー解決方法
-
エクセルで「1~15」の乱数...
おすすめ情報