[[20200507151947]] 『データの転記先セルが連続でない(E3,G3,E5,G5..=x(ま) ページの最後に飛ぶ

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

 

『データの転記先セルが連続でない(E3,G3,E5,G5..)場合の関数』(ま)

セルB3:B12に10個のデータがあります。(数字、ひらがななど複数文字種)
そのデータを転記したいのですが、転記先のセルは連続ではなく、(E3,G3,E5,G5..)の順です。

この場合、どのようなVBA関数が使用できるのでしょうか?

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


こんにちは ^^
いろいろ、方法は有ると思いますが。単純に考えると10アドレスを文字列で配列に
入れて、10回ループ回すとか^^;。。。でも。。。m(_ _)m
(隠居じーさん) 2020/05/07(木) 15:32

Sub test2()
    Dim rngFrom As Range
    Dim rngTo As Range
    Dim c As Range
    Dim i As Long

    Set rngFrom = Range("B3:B6")
    Set rngTo = Range("E3,G3,E5,G5")

    For Each c In rngFrom
        i = i + 1
        rngTo.Areas(i).Value = c
    Next
End Sub

10個くらいなら、10行書いてもいいとは思いますが。。。。
むりやり^^;

(まっつわん) 2020/05/07(木) 15:39


 参考に
 Sub Test2()
    Dim i As Long

    For i = 1 To 10
        Range("E3").Offset(((i - 1) \ 2) * 2, ((i - 1) Mod 2) * 2).Value = Cells(i + 2, "B").Value
    Next
 End Sub

(ピンク) 2020/05/07(木) 15:51


 こんにちは ^^
かぶりましたが。。。配列版です。。。ごりおしですが。。。^^;
Option Explicit
Sub OneInstanceM2()
    Const zProgramID  As String = "IJ00003.xlsm"
    Dim zTb           As Workbook
    Dim i             As Long
    Dim zAary()       As Variant
    Dim zVar          As Variant
    Set zTb = Workbooks(zProgramID)
    zAary = Array("E3", "G3", "E5", "G5", "E7", "E8", "F3", "H3", "H5", "H7")
    With zTb.Worksheets("Sheet1")
        .Range("C:Z").Clear
        For Each zVar In .Range("B3:B12")
            .Range(zAary(i)) = zVar.Value
            i = i + 1
        Next
    End With
    Set zTb = Nothing
    Erase zAary
End Sub
(隠居じーさん) 2020/05/07(木) 15:56

 参考に2

 Sub Test3()
    Dim i As Long

    For i = 1 To 10
       Range("E:G").Cells((i - 1) * 3 + 7 + (i Mod 2 = 0)) = Cells(i + 2, "B").Value
    Next
 End Sub

(ピンク) 2020/05/07(木) 16:39


皆さま早速のコメントありがとうございます。
とても助かります。

ピンク様」
記入していただいたプログラムですが、
仮にG3⇒E5⇒G5⇒..の順で、E3を飛ばして転記させたい場合は
どうすればよいでしょうか?

Offsetの式を作り上げることができず、、、、
ぜひご教授いただけますと幸いです。
(ま) 2020/05/07(木) 16:54


 >仮にG3⇒E5⇒G5⇒..の

    For i = 1 To 10
        Range("E3").Offset((i \ 2) * 2, (i Mod 2) * 2).Value = Cells(i + 2, "B").Value
    Next

(ピンク) 2020/05/07(木) 17:40


 >Range("E3").Offset((i \ 2) * 2, (i Mod 2) * 2)

    For i = 1 To 10
        MsgBox "iが" & i & "の時、セルE3に対し" & vbCrLf & _
            "下に" & (i \ 2) * 2 & vbCrLf & _
            "左に" & (i Mod 2) * 2
    Next

(ピンク) 2020/05/07(木) 18:23


コメント返信:

[ 一覧(最新更新順) ]


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