[[20220614101831]] 『別ブックのワークシートのセルへの転記』(和哉) ページの最後に飛ぶ

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

 

『別ブックのワークシートのセルへの転記』(和哉)

Sub マスターデータ取込01() '指定したファイルを取り込み、別のファイルに貼り付ける。

    Dim SetFile As String
    Dim wbMoto, wbSaki As Workbook
    Dim i As Integer
    Dim j As Integer

    Set wbMoto = ActiveWorkbook  'マスターデータ取り込み元をブック名をセット(取り込み元)

    Application.DisplayAlerts = False

    SetFile = "C:\Users\user\Desktop\価格変更.xlsx "  'Sheet1'!R" & i - 3 & "C" & 2マスターデータファイルの取り込み場所をセット(取り込み先)

    Workbooks.Open Filename:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開きます()
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)

 For i = 17 To 20
      For j = 11 To 5 Step -2

        wbSaki.Worksheets("パウチ用").Cells(i - j, 3).Value = wbMoto.Worksheets("商品価格一覧表").Cells(i, 3).Value

        wbSaki.Worksheets("商品価格一覧表").Cells(i - j, 5).Value = wbMoto.Worksheets("本竜野").Cells(i, 5).Value
       Next j
       Next i

        Application.CutCopyMode = False  'コピー切り取りを解除

    Application.DisplayAlerts = True

End Sub
価格変更ブックのパウチ用シートにアクティブブックの商品価格一覧表シートのデータを転記したいのですが、不規則なセルに入力されているためうまくいきません? 
For〜Nextで不規則なセルへの転記がうまくいきません

 For i = 17 To 20
      For j = 11 To 5 Step -2

        wbSaki.Worksheets("パウチ用").Cells(i - j, 3).Value = wbMoto.Worksheets("本竜野").Cells(i, 3).Value

        wbSaki.Worksheets("パウチ用").Cells(i - j, 5).Value = wbMoto.Worksheets("本竜野").Cells(i, 5).Value
       Next j
       Next i
どの様にコードを変えたらいいのか?何方かレクチャーお願いいたします。

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


Sub マスターデータ取込01() '指定したファイルを取り込み、別のファイルに貼り付ける。

    Dim SetFile As String
    Dim wbMoto, wbSaki As Workbook
    Dim i As Integer
    Dim j As Integer

    Set wbMoto = ActiveWorkbook  'マスターデータ取り込み元をブック名をセット(取り込み元)

    Application.DisplayAlerts = False

    SetFile = "C:\Users\user\Desktop\価格変更.xlsx "  'Sheet1'!R" & i - 3 & "C" & 2マスターデータファイルの取り込み場所をセット(取り込み先)

    Workbooks.Open Filename:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開きます()
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)

 For i = 17 To 20
      For j = 11 To 5 Step -2

        wbSaki.Worksheets("パウチ用").Cells(i - j, 3).Value = wbMoto.Worksheets("商品価格一覧表").Cells(i, 3).Value

        wbSaki.Worksheets("パウチ用").Cells(i - j, 5).Value = wbMoto.Worksheets("商品価格一覧表").Cells(i, 5).Value
       Next j
       Next i

        Application.CutCopyMode = False  'コピー切り取りを解除

    Application.DisplayAlerts = True

End Sub
価格変更ブックのパウチ用シートにアクティブブックの商品価格一覧表シートのデータを転記したいのですが、不規則なセルに入力されているためうまくいきません? 
For〜Nextで不規則なセルへの転記がうまくいきません

 For i = 17 To 20
      For j = 11 To 5 Step -2

        wbSaki.Worksheets("パウチ用").Cells(i - j, 3).Value = wbMoto.Worksheets("商品価格一覧表").Cells(i, 3).Value

        wbSaki.Worksheets("パウチ用").Cells(i - j, 5).Value = wbMoto.Worksheets("商品価格一覧表").Cells(i, 5).Value
       Next j
       Next i
どの様にコードを変えたらいいのか?何方かレクチャーお願いいたします
すいませんでした。正しいコードはこれです。
(和哉) 2022/06/14(火) 11:06

>不規則なセルに入力されているためうまくいきません?
>For〜Nextで不規則なセルへの転記がうまくいきません

元データが「不規則なセルに入力されている」のか、
転記先が「不規則なセル」なのか、どちらでしょうか?

そもそも「不規則なセル」といっても、どうなっているのかわかりません。
また、「うまくいきません」といっても、どうなっているのかわかりません。

(わからん) 2022/06/14(火) 11:12


自分で書いたものがすべて合っていると思うな。
部分的に試しなさい。
ステップ実行と言うものを覚えなさい。
(反面) 2022/06/14(火) 11:16

すいません 元デ-タは規則正しくRange("C17:C20")とRange("E17:E20")入力されていますが、転記先は
C6,C9,C12,C15の範囲とE6,E9,E12,E15の範囲のどちらも飛び飛びにデータが入っております。

(和哉) 2022/06/14(火) 11:32


「不規則なセル」には見えませんね。

ご参考。

 Sub test()
    For i = 17 To 20
        MsgBox (i - 17) * 3 + 6
    Next
 End Sub

(わからん) 2022/06/14(火) 11:42


わからんさんありごとうございます。 カウンター変数(i - 17) * 3 + 6 をどの様に考えたらいいのでしょうか?
(和哉) 2022/06/14(火) 12:06

実行してみましたか?

目的と違っていたならスルーしてください。

(わからん) 2022/06/14(火) 12:15


はいうまく行きました。
(和哉) 2022/06/14(火) 12:26

■1
コードはご自身で書かれたものですか?それともどこかのサイトを参考にされたのでしょうか?
困りはしないとおもいますが、↓が気になります。
 ・wbMotoがValiant型になってます
 ・wbSakiが2度開かれています

既に↓で述べてますので参考にしてみて下さい。

 【過去ログ】
[[20210122143920]] 『データの最終行までコピー』(Help)
[[20210301134135]] 『実行時エラー1004の原因』(sugar)
[[20210403111842]] 『指定した値を検索し、別エクセルに転記したい』(SS)
[[20210531191339]] 『別シートのマクロ実行』(すにゃ)
[[20210623143216]] 『VBAのコピーについて』(健太)
[[20210713155219]] 『「暗証番号付きのファイルの範囲をコピーして取込』(超初心者)

■2
↓は何をしているか理解出来てますか?

 〜〜〜.Value = 〜〜〜.Value
 Application.CutCopyMode = False

■3
こだわりがなければ、インデント(字下げ)を付けることを考えると良いと思います。

■4
>元テ゛-タは規則正しくRange("C17:C20")とRange("E17:E20")入力されていますが、
>転記先はC6,C9,C12,C15の範囲とE6,E9,E12,E15の範囲のどちらも飛び飛びにデータが入っております。

正直、私にはセルの関係性がピンと来てないのですが、↓のような関係性なんでしょうか?

 wbMoto.Worksheets("商品価格一覧表").Range("C17:C20") → wbSaki.Worksheets("パウチ用").Range("C6:C9").Value
 wbMoto.Worksheets("商品価格一覧表").Range("E17:E20") → wbSaki.Worksheets("パウチ用").Range("E6:E9").Value

                      何らかのシート.Range("C17:C20") → wbSaki.Worksheets("パウチ用").Range("C12:C15").Value
                      何らかのシート.Range("E17:E20") → wbSaki.Worksheets("パウチ用").Range("E12:E15").Value

 1シート処理する度に、出力先のセルが下に6こずれるみたいな・・・
 (それなら、既に指摘されているように規則性はありますね)

(もこな2 ) 2022/06/14(火) 13:08


>↓のような関係性なんでしょうか?

このように↓理解して回答したのですが、本当のところは質問者さんにしかわかりません。

 C17 → C6 、 E17 → E6 
 C18 → C9 、 E18 → E9
 C19 → C12 、 E19 → E12
 C20 → C15 、 E20 → E15

(わからん) 2022/06/14(火) 13:34


あぁなるほど。データ側は連続したセル範囲だけども、出力側は3行おきになるということですか。
↓のように仰ってるからそれが正解なんでしょうね。説明ありがとうございます。
>はいうまく行きました。

そうなると、こんな感じですかね。

    Sub テキトー()
        Dim srcSH As Worksheet, dstSH As Worksheet
        Dim i As Long

        Set srcSH = ActiveWorkbook.Worksheets("商品価格一覧表")
        Set dstSH = Workbooks.Open("C:\Users\user\Desktop\価格変更.xlsx").Worksheets("パウチ用")

        For i = 0 To 3 Step 1
            dstSH.Range("C6").Offset(i * 3).Value = srcSH.Range("C17").Offset(i).Value
            dstSH.Range("E6").Offset(i * 3).Value = srcSH.Range("E17").Offset(i).Value
        Next i
    End Sub

(もこな2 ) 2022/06/14(火) 16:38


すいません僕も連続したデータ側と出力側の3行おきなんかに悩んでいる初心者です。
もこな2さんの Sub テキトーのコードを試しましたが C6→C17とE6→E17の一行しか転記されませんでしたが、なぜでしょうか? 小生はいつももこな2にお世話になっております。
(泰人) 2022/06/15(水) 15:46

Offset(i*3)とかの演算ではカウンター変数は使えないのでしょうか?

(泰人) 2022/06/15(水) 16:32


★1
>コードを試しましたが C6→C17とE6→E17の一行しか転記されませんでしたが、なぜでしょうか?
実際のコードをみないとわかりません。パスやブック名があれば、そこはフェイクで構いませんから、現状のコードを提示してみてください。
 ※一応、こちらの環境では↓のようにして想定通り動作することは確認済です。
    Sub テキトー()
        Dim srcSH As Worksheet, dstSH As Worksheet
        Dim i As Long
        Set srcSH = Worksheets("元")
        Set dstSH = Worksheets("先")
        For i = 0 To 3 Step 1
            dstSH.Range("C6").Offset(i * 3).Value = srcSH.Range("C17").Offset(i).Value
            dstSH.Range("E6").Offset(i * 3).Value = srcSH.Range("E17").Offset(i).Value
        Next i
    End Sub

★2
>カウンター変数
「カウンター変数」とは何を想定しているのかわかりませんが、↓で「i」という変数が1ずつカウントアップしています。

        For i = 0 To 3 Step 1
            dstSH.Range("C6").Offset(i * 3).Value = srcSH.Range("C17").Offset(i).Value
            dstSH.Range("E6").Offset(i * 3).Value = srcSH.Range("E17").Offset(i).Value
        Next i

(もこな2 ) 2022/06/15(水) 20:15


コメント返信:

[ 一覧(最新更新順) ]


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