ショボ短歌会

VBAについて教えてください



sheet1(記入用フォーマット)コピー元

sell(34,3)にフォームコントロールのチェックボックスをリンクさせています。

記入欄はその同じ行のRANGE("d34:f34")、RANGE(g34:i34)、RANGE(i34:k34)の三箇所です。
この三箇所に記入された文字列をsell(34,3)にリンクさせてあるチェックボックスにチェックを入れることで次のsheet2に転記されるようにしたいです。

記入欄は34行目から12行にわけてあります。

※フォーマット上無理がある場合などは変更考えます。



sheet2(ペースト先の表)

表は項目名がありその下の行からのペースト

sheet1.RANGE(i34:k34)=sheet2.RANGE(C7:E7)

sheet1.RANGE("d34:f34")=sheet2.RANGE(e7:g7)

sheet1.RANGE(g34:i34)=sheet2.RANGE(h7:j7)

になるようにし、7行目から106行目までの表に上から順にペーストしていきたいです。

ほんとにど素人で説明もろくに出来ませんが、なんとかお力をお借りできればと思っています。
よろしくお願いします

「VBAについて教えてくださいsheet1」の質問画像

A 回答 (1件)

こんばんは!


https://oshiete.goo.ne.jp/qa/9008238.html
と全く同じ質問ですね?

あちらの方法で解決済みだと思ったのですが・・・
関数でやるにしても、VBAでやるにしても行・列の配置が重要です。
1行・1列でも違えば全く意味のないコード(数式)になってしまいますので、
せっかく画像をアップされているのであれば、行番号・列番号も判るような画像でないと意味がないと思います。

ところで、どうしてもチェックボックスを使用しなくてはならない理由があるのでしょうか?

>※フォーマット上無理がある場合などは変更考えます。
とありますので、別案です。

↓の画像ではSheet1のB列は入力規則の「リスト」にしています。
B列を範囲指定 → メニューの「データ」 → データの入力規則 → リスト → 元の値の欄に
 ,✓
全角スペース+カンマ+✔ と入力しOK
これでスペースもしくは✔のどちらかが選択できます。
そうした上での標準モジュールです。

Sub Sample1()
Dim i As Long, lastRow As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")

With Worksheets("Sheet2")
Application.ScreenUpdating = False
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 6 Then
Range(.Cells(7, "B"), .Cells(lastRow, "K")).ClearContents
End If
For i = 34 To wS.Cells(Rows.Count, "D").End(xlUp).Row
If Trim(wS.Cells(i, "C")) <> "" Then
cnt = cnt + 1
With .Cells(Rows.Count, "B").End(xlUp).Offset(1)
.Value = cnt
Range(wS.Cells(i, "D"), wS.Cells(i, "L")).Copy
.Offset(, 1).PasteSpecial Paste:=xlPasteAll
End With
End If
Next i
Application.CutCopyMode = False
Application.ScreenUpdating = True
End With
End Sub

※ どうしてもチェックボックスを使わなければならない場合は
無視してください。m(_ _)m
「VBAについて教えてくださいsheet1」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!