[[20230311151600]] 『for each in で処理』(kuki) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『for each in で処理』(kuki)

例えば
trange.addressが$A$1:$D$1
frange.addressが$G$5
として

for each in でtrangeを処理する場合
frangeから下方向にtrangeの値を順番に書き出すにはコードはどのようになりますか?

参考

    |[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]
 [1]|a  |b  |c  |d  |   |   |   |   
 [2]|   |   |   |   |   |   |   |   
 [3]|   |   |   |   |   |   |   |   
 [4]|   |   |   |   |   |   |   |   
 [5]|   |   |   |   |   |   |a  |   
 [6]|   |   |   |   |   |   |b  |   
 [7]|   |   |   |   |   |   |c  |   
 [8]|   |   |   |   |   |   |d  |   

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 仮にコピーペイストを使うとして、不明点は、書き込み先のセルの指定ですか?
 set toRng = [G5]
 としておいて、書き込みしたつど
 set toRng = toRng.Offset(1)
 と移動させる、でしょうか。

 繰り返しを使わなくても、
 (1)形式を選択して貼り付け(行列の入れ替え)
 (2)TRANSPOSE関数の使用
 などで対応するほうが自然でしょうか。
 365なら数式で簡単にできるのかな?

(abc) 2023/03/11(土) 15:33:02


 Sub subuuu()
    Dim i As Long
    Dim r As Range
    i = 5
    With Worksheets("Sheet1")
        Set r = .Range("$A$1:$D$1")
        For Each c In r
            .Cells(i, "G") = c
            i = i + 1
        Next
    End With
End Sub
^^;
m(__)m
(隠居Z) 2023/03/11(土) 15:40:34

    Dim r
    Dim R_Num As Long
    Dim C_Num As Long
    R_Num = trange.Row
    C_Num = trange.Column

    For Each r In cellRange
        Cells(R_Num, C_Num).Value = r
        R_Num = R_Num + 1
    Next

上記は、OKですが
下記のように替えると何も書き出されない?

    Cells(R_Num, C_Num).Value = r.resize(2,1)

   レンジの1行下も含めての意味ですが間違っていますか?

(kuki) 2023/03/11(土) 15:54:32


>>上記は、OKですが
が、本当なら、r.resize(2,1)の後ろに、バリュー
を付けてみて下さい。左辺が1セルに対し右辺が2セルに
成っていると思いますので、まともに表示はされないとは
思いますが。。。←何かは表示されるかも。。。。^^;
m(__)m
(隠居Z) 2023/03/11(土) 16:21:02

Cells(R_Num, C_Num).Value = r.Resize(2, 1).Value

変えてみましたが、
Cells(R_Num, C_Num).Value = r と同じ文字列しか表示されません。
(1行下の文字列が拾えていません。)
(kuki) 2023/03/11(土) 16:44:37


Cells(R_Num, C_Num).Resize(1, 2).Value = r.Resize(2, 1).Value

上記では、以下のように上側がダブって表示される

    |[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]|[I]
 [1]|a  |b  |c  |d  |   |   |   |   |   
 [2]|  1|  2|  3|  4|   |   |   |   |   
 [3]|   |   |   |   |   |   |   |   |   
 [4]|   |   |   |   |   |   |   |a  |a  
 [5]|   |   |   |   |   |   |   |b  |b  
 [6]|   |   |   |   |   |   |   |c  |c  
 [7]|   |   |   |   |   |   |   |d  |d  

(kuki) 2023/03/11(土) 16:49:41


 お世話になりました。

以下で自己解決しました。

   For Each r In cellRange
        Cells(R_Num, C_Num).Value = r
        Cells(R_Num + 1, C_Num) = r.Offset(1, 0)
        R_Num = R_Num + 2
    Next

(kuki) 2023/03/11(土) 17:01:20


m(__)m
(隠居Z) 2023/03/11(土) 17:16:55

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.