お世話になります。VBA初心者です。エクセルにてコマンドボタン(SHEET1上に配置)をクリックすることで下記を実行するにはどうしたら良いですか。
(1);SHEET1のB3:L9に入力した値をSHEET2のB3:B9に貼り付けを行い、その後にSHEET1のB3:L9を空白に戻す。
(2);(1)を実行後、再度SHEET1のB3:L9に値を入力を行い、同じコマンドボタンをクリックすると、今度は(1)で貼り付けたSHEET2のB3:L9の下(2回目なのでB10:L16)に改行して貼り付ける。貼り付け後は(1)と同様。これをくりかえし(B17:L23,B24:L30....)。
SHEET1に入力した値をSHEET2に記録として残しておくために、このようなことをしたいと考えます。どうか宜しくお願いします。
No.3ベストアンサー
- 回答日時:
B列のどこかひとつにでも入力があれば以下で大丈夫だと思います。
C~L列の入力の有無は問いません。
Private Sub CommandButton1_Click()
Dim x As Long, xx As Long
Dim Rng As Range
Set Rng = Sheets("Sheet1").Range("B3:L9")
x = Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row
If x > 2 Then
xx = Application.Ceiling(x - 2, 7) + 3
Else
xx = 3
End If
Rng.Copy Sheets("Sheet2").Range("B" & xx)
Rng.ClearContents
End Sub
No.2
- 回答日時:
補足元データの範囲で未入力の行がある場合誤動作します
たとえば B8:L9が未入力だった場合などです
先の投稿の既存データがある場合の部分を
dim n as intger
n = Trg.Rows( Trg.Ros.Count ).row - 3
' 取得した行数の最後が 元データの行数の整数倍かをチェック
if n mod Src.Rws.Count <> src.ows.Count - 1 then
n = ( ( n \ Src.Rws.Count ) + 1 ) * Src.Rws.Count
end if
set trg = Trg.Offset( n ).Resize( Src.Rws.Count )
といった具合の調整が必要でしょう
再びのご回答ありがとうございます。
今回の件につきましては、回答番号:No.3様のご回答を採用させて
いただき、対応しようと思います。お手数をおかけしました。
ありがとうございました。
No.1
- 回答日時:
Sub Test
dim Src as Range, Trg as Range
' コピー元設定
set src = Sheet1.Range("B3:L9")
' 既存のコピー先の取得
Set Trg = InterSect( Sheet2.Range("B:L"), Sheet2.UsedRange)
if Trg Is Nothing then
' 既存のデータが無い場合
Set Trg = Sheet2.Range("B3:L9")
else
' 既存のデータがある場合
Set Trg = Trg.Offset(Trg.Rows.Count).Resize(Src.Rows.Count )
end if
' データの転記
Trg.Value = Src.Value
’ 元データ領域のクリア
Src.Value = ""
End Sub
といった具合で ...
さっそくのご回答ありがとうございます。
今後のために参考にさせていただきます。ご回答内容の中には???な部分がかなりあります(超初心者なもので・・・)が、なんとか勉強したいと思います!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでvlookup関数から、別シート参照するやり方・・・ 2 2022/11/14 18:49
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 別シートに順番で貼り付け 2 2023/04/13 19:53
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) VBA active sheetをPDF化して指定フォルダに保存 1 2022/07/07 11:27
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
S9タイプからXタイプにデータ...
-
配列でデータが入っている要素...
-
VBA 毎日取得するデータを順番...
-
VBAで「"」[']をエスケープする...
-
Accessで該当データにフラグを...
-
エクセルで2つの時系列のデー...
-
メモ帳(テキストデータ)をExc...
-
VB6のListの使い方
-
ActiveReportについて
-
fortranでフーリエ変換→パワー...
-
MSCommを用いたRS-232-Cデータ転送
-
【VBA】データを入力後に,同一...
-
EXCELVBAでSQLserverからデータ...
-
PDOオブジェクトは使い回し可能?
-
シリアル通信でのデータ受信
-
PLSQLで文字列置換
-
VBAを使ってOutlookメール本文...
-
Excelの関数で表示されているデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
ブレーカー落ちで壊れたりしな...
-
[C言語] コメント文字列を無視...
-
オープンチヤットでデータ削除...
-
モジュラス103の算出方法について
-
javaでDBからデータを取ってき...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
Android携帯をUSBメモリ代わりに
おすすめ情報