[[20170121153348]] 『マクロシートの飛び飛びの値をコピペする』(ウルトラ) ページの最後に飛ぶ

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

 

『マクロシートの飛び飛びの値をコピペする』(ウルトラ)

sheet1
AF  AG  AH AI AJ  AK   AL AM  AN  AO  AP  AQ  AR  AS   AT   AU
1 購入日 米 金額 2 購入日 パ ン 金額 3 購入日 味 噌 金額 4 購入日 ジュース 金額
 合計  7472   合計   1170   合計        0      合計      0
sheet2
A B        C 
1 米            7472
2 パ ン          1170
3 味 噌            0
4 ジュース          0
5 食料品         6689
6 食料品         46691
7 日用雑貨      9615
8 病 院         2990
9 クリーニング         0

前提の条件

sheet1の1行目に米などの文言が入っています。2行目に金額が
AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2の
各セルに入っているとします。また、今示した2行目のAH2〜DJ2の所は、SUMの関数が入っています。

sheet2は既にA列に番号B列に文言が入っています。

やりたいこと

C列にsheet1の金額のところだけをsheet2のC列の2行目から22行までの21項目に対して
金額を入れたい。

マクロを作ってみました。

Sub test1()

    Sheets1.Select

    Range("AF3:DK3").Select
    Selection.Copy

    Sheets2.Select
    Range("C2:C22").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False

End Sub

上記のようにしたとき、"AF3:DK3"が飛び飛びの時にどのようにしたらよいのか。教えて頂けますか。
初心者で全体がこのようなマクロの設定でよいのかもイマイチわかりません、ご教授お願いします。

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


>"AF3:DK3"が飛び飛びの時にどのようにしたらよいのか。教えて頂けますか。
>初心者で全体がこのようなマクロの設定でよいのかもイマイチわかりません

手動で、
飛び飛びのセルを選択することは可能ですか?

出来るとして、何も考えずにコピーしたいセルを選択して、コピーし、
貼り付けたいシートのセルを選択して、
貼付オプションの「行列を入れ替えて貼付」で貼り付けてみてください。

期待する結果になるならその操作をマクロの記録して、
コードを調べます。

それを参考に不要な操作などは排除し、
汎用的に使えるように組み立てます。

(まっつわん) 2017/01/21(土) 16:09


(まっつわん)さんの言うこともやって見て知っていましたが、マクロの勉強にと思ってやってみています。

このようにやったのですが、うまくいきません、お教え下さい。

Range("AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2").Select

まずは、上記は一定の3セルずつなので、まとめられたらというのがあります。

Range("C2:C22").Paste:=xlPasteValues Transpose:=True
 := がエラーになってしまいます。

全体が以下の通りです

Sub test1()

    Sheet1.Select
    Range("AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2").Select
    Selection.Copy

    Sheet2.Select
    Range("C2:C22").Paste:=xlPasteValues Transpose:=True 
    ActiveSheet.Paste
    Application.CutCopyMode = False

End Sub

(ウルトラ) 2017/01/21(土) 19:32


追伸です。
AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2の隣のセルと、全てがセルの結合をしているのも記述を忘れていました。すみません。

(ウルトラ) 2017/01/21(土) 19:37


すみません、どなたか行を列に変えて貼り付けのどこがおかしいのか、また、セルの結合をそのままで、エラーを回避するにはどのようにしたらよいのでしょうか。お教え下さい。

Range("C2:C22").Paste:=xlPasteValues Transpose:=True

    ActiveSheet.Paste
    Application.CutCopyMode = False
(ウルトラ) 2017/01/22(日) 08:15

マクロでなく、数式ではだめなのでしょうか?

(マナ) 2017/01/22(日) 08:31


 コードでどうするということの前に

 >>AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2

 これは 21の領域ですね。 で、その転記先の C2:C22 も 21 の領域ですね。

 その転記先の 例えば C2 には AH2:AI2 の結合セルに入っている値(実際には AH2 の値)を転記したいのですね?

( β) 2017/01/22(日) 09:45


(マナ)さん、申し訳ありません。
わがままで申し訳ありません。
数式でもよいのですが・・・・・・・・
出来れば、マクロにこだわりたいのはだめでしようか。

( β) さん

その転記先の 例えば C2 には AH2:AI2 の結合セルに入っている値(実際には AH2 の値)を転記したいのですね?

その通りです。セルの結合を解くべできでしょうか。それも可能ですが、できればそのままにしたいのですが、いかがでしようか。
(ウルトラ) 2017/01/22(日) 09:59


 追加で。

 マナさん指摘のように数式を工夫して転記するというのが簡単かもしれません。
 ただ

 >>マクロの勉強にと思ってやってみています

 ということでしょうから、マクロで考えるとして。

 ・とびとびのセル領域を Crtlキーを押しながら選択して、Ctrl/c。 どうなりますか?
  エクセルから叱られますね。 飛び飛びの領域をコピーする操作自体がエクセルでは不可能です。
  操作不可能ということは、その操作をVBAで一発で処理することも不可能だということになります。

 ・とびとびではなく 連続した結合セルがあるとします。
  たとえば A1:B1、C1:D1、E1:F1。この3つのセル領域になにか値を入れておいて、A1:F1を選択して Ctrl/c。
  次に A2 を選択して、形式を選択してして貼り付け(行列を入れ替える)
  コピペはできますね。でも、貼付け先を見てください。 A2:A3、A4:A5、A6:A7 が結合されて、そこに
  値がペーストされていますね。
  つまり、結合セルをコピーしてペーストすると、転記先も結合セルになります。
  単一セルに結合セルの値をペーストすることはできません。
  ただ、行列を入れ替えるということに加え、値ではなく数式貼り付けにすると、転記先は結合はされません。
  でも、A2:A4,A6 の飛び飛びのセルに値が転記されます。
  つまり、どんなやりかたをしても、連続した結合セルの値を『連続した単一セル』にコピペすることはできません。

  ★何が言いたいかというと、『操作』では、ご希望の転記は『不可能』です。
   操作で不可能ということは、そういった操作を行うVBAメソッドはないということになります。
   つまり、VBAでは(一発転記は)無理。
   『マクロの勉強』ということであれば、ループ処理による構文の組み立てが必要になります。

( β) 2017/01/22(日) 10:04


 ということで処理コード例です。Sample1 の構文をじっと見つめれば、何をしているのかがわかると思います。
 Sample2 は、全く同じことをしているんですが、セルへの書き込みを1回に抑えて効率アップをはかったコードです。

 Sub Sample1()
    Dim c As Range
    Dim i As Long

    i = 2 '転記開始行

    For Each c In Range("AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2")
        Cells(i, "C").Value = c.Value
        i = i + 1 '次の転記行
    Next

 End Sub

 Sub Sample2()
    Dim c As Range
    Dim i As Long
    Dim v As Variant

    With Range("AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2")
        ReDim v(1 To .Areas.Count, 1 To 1)
        For Each c In .Cells
            i = i + 1
            v(i, 1) = c.Value
        Next
    End With

    Range("C2").Resize(UBound(v, 1)).Value = v

 End Sub

( β) 2017/01/22(日) 10:14


あれ?出来ませんでした?
貼り付けの時にC2セル選択だけでいいと思いますけど、、、、

マクロの記録の抜粋です。

Sub Macro1()
'
' Macro1 Macro
'

'

    Range( _
        "AH2:AI2,AL2:AM2,AP2:AQ2,AT2:AU2,AX2:AY2,BB2:BC2,BF2:BG2,BJ2:BK2,BN2:BO2,BR2:BS2,BV2:BW2,BZ2:CA2,CD2:CE2,CH2:CI2,CL2:CM2,CP2:CQ2,CT2:CU2,CX2:CY2,DB2:DC2,DF2:DG2,DJ2:DK2" _
        ).Select
    Range("DJ2").Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    Selection.UnMerge
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlUp
End Sub

セルの結合がされているということなので、
貼り付けた後解除して空白セルを削除みたいな感じでいけると思いますが。。。。
(まっつわん) 2017/01/22(日) 10:18


 >>あれ?出来ませんでした? 

 あぁ! 同じ行ならとびとび領域でもコピーできますね!
 失礼しました。

 であれば、まっつわんさんいわれるように、1行にあるとびのセル領域を選択して Ctrl/c。
 C2 を選択して行列を入れ替えて『数式』コピー。
 その状態で、条件を選択してジャンプで空白セル。
 選択されたらセルの削除で上方移動。

 この操作でいけますね。なのでマクロ記録もできるわけですね。

 (できあがりの結合を解除するのでもいいですけど、『数式コピー』なら解除の1手間がカットできるかと)

( β) 2017/01/22(日) 10:49


( β)さんのことについて

 >つまり、結合セルをコピーしてペーストすると、転記先も結合セルになります。
 >  単一セルに結合セルの値をペーストすることはできません。
 >  ただ、行列を入れ替えるということに加え、値ではなく数式貼り付けにすると、転記先は結合はされません。
 >  でも、A2:A4,A6 の飛び飛びのセルに値が転記されます。
 >  つまり、どんなやりかたをしても、連続した結合セルの値を『連続した単一セル』にコピペすることはできません。

 大変なことを私は言っていること、反省しています。結合セルでなくても、大きく支障はなかったのですが、私のわがままでした。
 また、こんな大きなことになるとは、想像もしなかったし大変申し訳ありませんでした。

改めてで申し訳ありません。下記の部分を全てセルの結合を解除したデーターにします。( β)さんの 2017/01/22(日) 10:14のこのマクロだったらできますか、よろしくお願いします。

AH2,AL2,AP2,AT2,AX2,BB2,BF2,BJ2,BN2,BR2,BV2,BZ2,CD2,CH2,CL2,CP2,CT2,CX2,DB2,DF2,DJ2

(まっつわん)にもご迷惑をおかけして申し訳ありません。
(ウルトラ) 2017/01/22(日) 15:05


 これで、完成しました。今回も色々な方にご迷惑かけてしまいました。ほんとう申し訳ありませんでした。
 先ほども書きましたが、基本的なことがわかっていないで我が儘なことを言っていたこと、重ね重ねお詫びいたします。いつもありがとございます。

Sub test1()

    Sheet1.Select
Range( _
        "AH2:AI2,AL2:AM2,AP2:AQ2,AT2:AU2,AX2:AY2,BB2:BC2,BF2:BG2,BJ2:BK2,BN2:BO2,BR2:BS2,BV2:BW2,BZ2:CA2,CD2:CE2,CH2:CI2,CL2:CM2,CP2:CQ2,CT2:CU2,CX2:CY2,DB2:DC2,DF2:DG2,DJ2:DK2" _
        ).Select
    Range("DJ2").Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    Selection.UnMerge
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlUp

End Sub

(ウルトラ) 2017/01/22(日) 15:48


 まことに、申し訳ありません、早とちりしていました。
 先ほどは、完成したと言いましたが、再度やってみて次のような結果でした。私の言い方で誤解をされたかもしれません。できれば、修正できないでしようか、お願いします。
また、セルの結合を解除すべきであれば、解除することは問題ありません。

マクロを実行してみると

1.余計なことを先ほど書いてしまったようでした。sheet2にはsheet1の合計の値のみコピーでよかったのに、sheet1に合計の関数が入っていると書いてしまっていました。関数はコピーしてほしくなかったのですが、値のみと言っておくべきでした。

2.実行すると、sheet2のC2=SUM(D3:IQ3),C3=SUM(D5:IQ5)このようにC43まで続いてしまいます。但し、これも、C22まで続きます。

 また、C23〜C43までは空白の欄で関数は入っていません。(当然入っては困るセルになります)

 sheet2のD列〜IQ列を参照しています。(月ごと金額が入っている)

 ちなみに、sheet2のG列〜V列には別のデーターが既存で入っています。(月ごと金額が入っている)

3.sheet2のC23にはC2〜C22の合計が入るように既存のものがありますので、これが消えてしまいます。

4.1コードを2コードのxlPasteValues箇所を変えてやってみましたが、値が表示されました。しかし、C7まではsheet1の同じフォントの文字が入りますが、その後はフォントが変わっています。また、上記と同じようにC23〜C43は結果が同じでした。

1 Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

        False, Transpose:=True
2 Selection.PasteSpecial Paste:=xlPasteValues, Operation::=xlNone, SkipBlanks:= _
        False, Transpose:=True

(ウルトラ) 2017/01/22(日) 18:42


数式案は却下でしたが
マクロで数式入れて、値に変換でもだめですか

 Sub test()

    With Sheets("Sheet2").Range("C2:C22")
        .Formula = "=HLOOKUP(B2,Sheet1!$1:$2,2,0)"
        .Value = .Value
    End With

 End Sub

(マナ) 2017/01/22(日) 19:19


(マナ)さん 2017/01/22(日) 19:19やっと出来ました。今度こそ完成です。どうしても、2カ所だけがエラーになってしまっていました。このコードでできました。コードに原因はなかったのですが、以前のようにB列の名称がsheet1の名称とスペースが一致していなかったのでエラーになっていました。この前も注意を受けたばかりなのに、気づくことができず、本当に馬鹿な私です。皆さんに迷惑を大変掛けてしまいました。今後ともよろしくお願いします。ありがとございました。
(ウルトラ) 2017/01/22(日) 22:55

>( β)さんの 2017/01/22(日) 10:14のこのマクロだったらできますか、よろしくお願いします。

勉強のためというなら、試してみればよいと思います。

(マナ) 2017/01/22(日) 23:04


コメント返信:

[ 一覧(最新更新順) ]


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