[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロシートの飛び飛びの値をコピペする』(ウルトラ)
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 >
手動で、
飛び飛びのセルを選択することは可能ですか?
出来るとして、何も考えずにコピーしたいセルを選択して、コピーし、
貼り付けたいシートのセルを選択して、
貼付オプションの「行列を入れ替えて貼付」で貼り付けてみてください。
期待する結果になるならその操作をマクロの記録して、
コードを調べます。
それを参考に不要な操作などは排除し、
汎用的に使えるように組み立てます。
(まっつわん) 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
(ウルトラ) 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
マクロの記録の抜粋です。
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(日) 23:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.