[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル範囲を値貼り付け』(しのみや)
結果シートのセル範囲に式を入れて、値貼り付けをしたかったので
With Sheets("結果")
with .Range("C4:C13,C15:C19,C21:C27,C29:C33,C35:C41,C43:C52,C54:C58,T4:T12,T14:T17,T19:T26,T28:T38,T40:T43,T45:T49,T51:T55") .formulaR1C1="=RC[1]+RC[2]" .Value = .Value end with
End With
このようにしました。
そうすると、C列は問題なく T列がC4のセルを値貼り付けしたようになりました。
少し調べてみたのですが、列が変わると2次元配列になる?のでしょうか。
Range("C4:C13").Copy Range("C4").PasteSpecial Paste:=xlPasteValues このように、一塊の範囲でコピー&ペーストをしていくのでしょうか。
*先日OffsetやResizeを勉強したところなのですが、 こちらが使えるのでしょうか
< 使用 Excel:Excel2010、使用 OS:Windows10 >
へー、面白い現象ですね・・と言ったら不謹慎か。
我々、凡人ユーザーは RangeオブジェクトのValueプロパティ(取得と設定)が どのような振る舞いをするのか分かっていないことを痛感させてくれますね。
泥縄的解決策としては、エリア単位の処理でどうですか?
Sub test篠() Dim rArea As Range With Sheets("結果") With .Range("C4:C13,C15:C19,C21:C27,C29:C33,C35:C41,C43:C52,C54:C58,T4:T12,T14:T17,T19:T26,T28:T38,T40:T43,T45:T49,T51:T55") .FormulaR1C1 = "=RC[1]+RC[2]"
For Each rArea In .Areas 'エリア単位に値化 rArea.Value = rArea.Value Next End With End With End Sub
(半平太) 2020/12/10(木) 17:31
> そうすると、C列は問題なく T列がC4のセルを値貼り付けしたようになりました。
因みに、C列でも問題は生じています。
(半平太) 2020/12/10(木) 17:55
Sub testValue() Dim a a = Range("A1:A3,A6:A8").Value
Debug.Print UBound(a) & "," & UBound(a, 2)
End Sub
イミディエイトウィンドウには
3,1
と出力されます。
3×1の2次元配列になってます。
そこで、
Sub testValue()
Dim a a = Range("A1:A3,A6:A8").Value
Debug.Print a(1,1) Debug.Print a(2,1) Debug.Print a(3,1)
End Sub
を実行すると、A1からA3セルの値が出力されます。
Rangeで複数のセル範囲(エリア)を指定しても、Valueは最初のエリアだけ配列で返すということのようです。配列が複数のエリアを持つということはできませんので当然の結果と言えます。
ということで、半平太さんの提示されたコードのようにエリア単位で処理するしかないということになります。
(hatena) 2020/12/11(金) 00:28
マイクロソフトのHPでも >最初の領域に複数のセルが含まれている範囲の場合、 >Valueは、最初の範囲の個々のセルに含まれる値の >2次元配列を含むバリアント型 (Variant ) の値を返します。
と解説されていますね (とおりすがり) 2020/12/11(金) 07:28
Valueの取得については、比較的簡単に理解できるが、 Valueの設定の方はそんなに単純じゃない。
規則性はあるように見えますが、解明するのは容易じゃないし、 解明できたところで使い道は限られているので、 あれこれ考えるのは時間の無駄と言う気がします。
(半平太) 2020/12/11(金) 07:53
参考までに、下記A、B列を配列にいれて、D,E,F,Gに代入した1例を挙げておきます。
Sub 飛び飛びテスト() Dim v v = Range("A1:B3,A5:B6,A8:B11").Value Range("D1:G3,D5:G6,D8:G11").Value = v End Sub
行 _A_ _B_ _C_ __D__ __E__ __F__ __G__ 1 A J A J #N/A #N/A 2 B K B K #N/A #N/A 3 C L C L #N/A #N/A 4 5 E M A C K #N/A 6 F N B J L #N/A 7 8 G O A J #N/A #N/A 9 H P B K #N/A #N/A 10 I Q C L #N/A #N/A 11 J R #N/A #N/A #N/A #N/A
何かマニアックな使い方ができそうな気がしないでもない。
(半平太) 2020/12/11(金) 09:33
ありがとうございます
エリア単位で進める方法があるのですね…
自力で調べていて、 わかったようなわからないような状態でしたが、 いろんな検証下さり理解が深まりました。 丁寧に回答下さりありがとうございました。 (しのみや) 2020/12/14(月) 10:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.