Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2928 / 13644 ツリー ←次へ | 前へ→

【65147】範囲ごとの転記について isausa 10/4/19(月) 15:51 質問[未読]
【65148】Re:範囲ごとの転記について Jaka 10/4/19(月) 16:13 発言[未読]
【65149】Re:範囲ごとの転記について こんなん? 10/4/19(月) 18:00 回答[未読]
【65197】Re:範囲ごとの転記について isausa 10/4/26(月) 16:46 お礼[未読]
【65226】Re:範囲ごとの転記について あや 10/4/28(水) 14:12 回答[未読]
【65227】Re:範囲ごとの転記について isausa 10/4/28(水) 14:56 お礼[未読]
【65228】Re:範囲ごとの転記について Jaka 10/4/28(水) 15:10 発言[未読]

【65147】範囲ごとの転記について
質問  isausa  - 10/4/19(月) 15:51 -

引用なし
パスワード
   教えてください
同じシートのQ5:V19に10月分データが、W5:AB19に11月分データが入っています。同じ形式で12〜9月まであります。J5:O19に転記先があり、P1に10と入力すると10月分データが(Q5:V19)が、11と入力すると11月分データ(W5:AB19)が転記されるようにしたいのですが先の転記先(J5:O19)に表示されるようにしたいのですが、出来ますか。
経理のデータを月ごとに表示するのに使用したいのです。
どうかよろしくお願いいたします。

【65148】Re:範囲ごとの転記について
発言  Jaka  - 10/4/19(月) 16:13 -

引用なし
パスワード
   Dim データTb(1 To 12) As String
データTb(1) = ""
データTb(2) = ""
データTb(3) = ""
データTb(4) = ""
データTb(5) = ""
データTb(6) = ""
データTb(7) = ""
データTb(8) = ""
データTb(9) = ""
データTb(10) = "Q5:V19"  '10月データ
データTb(11) = "W5:AB19" '11月データ
データTb(12) = ""

入力した値 = 11 'だとして。(この辺の入力、取得は、自分で考えてください。)

Range("J5:O19").Value = Range(データ(入力した値)).Value
Erase データTb

エラー処理入れてません。

【65149】Re:範囲ごとの転記について
回答  こんなん?  - 10/4/19(月) 18:00 -

引用なし
パスワード
   月のデータの範囲はルールがありそうなので、
そのルールでOffsetした範囲と考えていいのであれば、
シートのChangeイベントを利用して、

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Dim v As Variant
  If Target.Count <> 1 Then Exit Sub
  If Target.Address <> "$P$1" Then Exit Sub
  v = Choose(Target.Value, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2)
  If Not IsNull(v) Then
    With Me.Range("Q5:V19")
      Set r = .Offset(, .Columns.Count * v)
    End With
    Application.EnableEvents = False
    Me.Range("J5:O19").Value = r.Value
    Application.EnableEvents = True
'    MsgBox v & vbCrLf & r.Address
  Else
    MsgBox "入力値が誤ってます。"
  End If
End Sub

でどうでしょう。
目的のシートのシートモジュールに記述します。

【65197】Re:範囲ごとの転記について
お礼  isausa  - 10/4/26(月) 16:46 -

引用なし
パスワード
   ありがとうございました。
はじめは丸写しでしたが、少し理解できました。
素朴な疑問ですが、MSGBOXはなくてもいいのですか。
外してみようと思いましたが、怖くてできません。

【65226】Re:範囲ごとの転記について
回答  あや  - 10/4/28(水) 14:12 -

引用なし
パスワード
   msgboxが使われているところは、

'    MsgBox v & vbCrLf & r.Address … 1.



MsgBox "入力値が誤ってます。"  … 2.

ですね。

1.は 記述の頭に ’(レム)が付いていますので、プログラムとしては飛ばされています。
(レムについて調べてみましょう)

2.は、セルのP1に、Nullが入っていたら
"入力値が誤ってます。"というメッセージが出るようになっています。
Null⇒スペースも何も入っていない空白


MsgBoxが必要かどうかはご自身の判断になります。
せっかく作って頂いたのですから、きちんと理解して使って下さいね☆

【65227】Re:範囲ごとの転記について
お礼  isausa  - 10/4/28(水) 14:56 -

引用なし
パスワード
   あや様
ありがとうございます。
レムって説明文て理解していいんですよね。マクロの中では色が変わりますね。

【65228】Re:範囲ごとの転記について
発言  Jaka  - 10/4/28(水) 15:10 -

引用なし
パスワード
   ▼あや さん:
>Null⇒スペースも何も入っていない空白
ちょっと気になったのでここだけ。
Null=空白 ではないです。
簡単に言うと、とりそこなったエラーですね。
今回の場合は、何も取れなかったのでエラー値(Null)が入ってます。

Null=空白 だとすると、全部Nullなのでしょうか?

Dim St1 As String
Dim St2 As String
Dim Va1 As Variant
Dim Va2 As Variant

St1 = Empty
MsgBox Len(St1)

St2 = ""
MsgBox Len(St1)

Va2 = Empty
MsgBox Len(Va2)

Va1 = ""
MsgBox Len(Va1)

2928 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free