Excel VBA質問箱 IV

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

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


2400 / 13645 ツリー ←次へ | 前へ→

【68261】データ入替処理 悩める老人 11/2/18(金) 22:05 質問[未読]
【68263】Re:データ入替処理 通行人 11/2/18(金) 22:32 発言[未読]
【68265】Re:データ入替処理 悩める老人 11/2/19(土) 6:48 質問[未読]
【68266】Re:データ入替処理 通行人 11/2/19(土) 8:58 発言[未読]
【68267】Re:データ入替処理 悩める老人 11/2/19(土) 9:41 お礼[未読]

【68261】データ入替処理
質問  悩める老人  - 11/2/18(金) 22:05 -

引用なし
パスワード
   このプログラムはAB列5行の表のデータ入替処理するものです。
AB列とも1行から5行に1から5の数字が入力されています。

この度プログラムの中に書いたような問題が発生しましたので
ご教示かた宜しくお願いします。

Public Sub test()

 Dim a1 As Integer, b1 As Integer
 Dim a1b1 As Range, a5b5 As Range
 Dim a1b4 As Range, a2b5 As Range
 
'1.変数にセルの値を代入
  a1 = Range("a1").Value
  b1 = Range("b1").Value
  
  Set a1b1 = Range("a1:b1")
  
  Set a5b5 = Range("a5:b5")
  Set a1b4 = Range("a1:b4")
  Set a2b5 = Range("a2:b5")
  
'2.2〜5行データを1〜4行に移動
  a1b4.Value = a2b5.Value
  
'3.最初(移動前)の1行目にあったデータを5行に表示します
  a5b5.Value = a1b1.Value

  '結果は移動後の1行目のデータが表示され意図したものになりません

'4.そこで次のようにしたら意図した結果となりました。

'  Range("a5").Value = a1
'  Range("b5").Value = b1

'プログラム2.で2〜5行データを1〜4行に移動した後でも変数a1,b1の値は
'変わらないのに Set a1b1 = Range("a1:b1")では a1b1 の値がどうして変わる
'のでしょうか? Set a1b1 = Range("a1:b1")では処理不可能でしょうか? 

End Sub

【68263】Re:データ入替処理
発言  通行人  - 11/2/18(金) 22:32 -

引用なし
パスワード
   Set a1b1 = Range("a1:b1")
はA1:B1というセル範囲に名前をつけているだけです。
そのセル範囲の値を取り込んでいるわけではないのです。
もし、A1:B1というセル範囲の値が変化すれば、
a1b1.Valueの値もそれに応じて変化してしまうのです。

【68265】Re:データ入替処理
質問  悩める老人  - 11/2/19(土) 6:48 -

引用なし
パスワード
   ▼通行人 さん:
>Set a1b1 = Range("a1:b1")
>はA1:B1というセル範囲に名前をつけているだけです。
>そのセル範囲の値を取り込んでいるわけではないのです。
>もし、A1:B1というセル範囲の値が変化すれば、
>a1b1.Valueの値もそれに応じて変化してしまうのです。

早速の回答ありがとうございました。
それではセル範囲の値を変化せずに処理するには
当方が対応した4.以外の方法はあるのでしょうか?
もしあればご教示お願いいたします。

【68266】Re:データ入替処理
発言  通行人  - 11/2/19(土) 8:58 -

引用なし
パスワード
   ▼悩める老人 さん:
>当方が対応した4.以外の方法はあるのでしょうか?

セル毎に保持しなくても、まとめて保持すればいいでしょう。
Va1b1というVariant型変数に値を持っておいて、
Va1b1 = Range("A1:B1").Value
最後に
a5b5.Value = Va1b1
と戻せばいいでしょう。

もっと複雑な値の入れ替えなら、
最初に2次元の配列を設けて、そこに値を入れていき、
最後にその配列をシートに書き出す方法もあるでしょう。
シートの矩形領域の値は、配列に取り出したり、
逆に配列から領域に書き込むことができるわけです。

【68267】Re:データ入替処理
お礼  悩める老人  - 11/2/19(土) 9:41 -

引用なし
パスワード
   ▼通行人 さん:
>▼悩める老人 さん:
>>当方が対応した4.以外の方法はあるのでしょうか?
>
>セル毎に保持しなくても、まとめて保持すればいいでしょう。
>Va1b1というVariant型変数に値を持っておいて、
>Va1b1 = Range("A1:B1").Value
>最後に
>a5b5.Value = Va1b1
>と戻せばいいでしょう。
>
>もっと複雑な値の入れ替えなら、
>最初に2次元の配列を設けて、そこに値を入れていき、
>最後にその配列をシートに書き出す方法もあるでしょう。
>シートの矩形領域の値は、配列に取り出したり、
>逆に配列から領域に書き込むことができるわけです。


ご丁寧な回答いただき大変有難うございました。
お陰さまで大変勉強になりました。
今後ともよろしくお願いいたします。
取り急ぎお礼まで 悩める老人

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