[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行も列も両方空白まで反映させたいです。』(へぼ助bb)
行も列も空白までループについて教えて下さい。
初歩的な質問ですみません。
シート1のC5セルを起点に行も列も空白になるまで
シート1のK10セルを起点にコピーしたいという場合どういったコードが
一番シンプルに作成できますでしょうか。
初心者で全然知識が浅いので
Sub 数値の反映 ()
Dim i As Long
i = 5 Do While Cells(i, 3) <> "" Cells(i + 5, 11) = Cells(i, 3) Cells(i + 5, 12) = Cells(i, 4) Cells(i + 5, 13) = Cells(i, 5) Cells(i + 5, 14) = Cells(i, 6) i = i + 1 Loop End Sub と言った感じで凌いでいますが C列だけのデータ、CD列のデータ、、CDEF列のデータ など複数あり C行が空白になるまでついでに列も空白になるまで選択して まとめて反映させる方法があれば教えて頂きたいです。 説明も下手で申し訳ありません。よろしくお願いします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
おはようございます。 >C行が空白になるまでついでに列も空白になるまで選択して 多分 CurrentRegion のことだと思います。
>一番シンプルに作成できますでしょうか。 一番かどうかはわかりませんが、、記録すると↓こんな書き方も出来ると思います。 結合セルとかはなしです。。。。
Option Explicit Sub Macro1() Columns("C:C").Insert Shift:=xlToRight Rows("5:5").Insert Shift:=xlDown Range("D6").CurrentRegion.Copy Range("L11").Select ActiveSheet.Paste Columns("C:C").Delete Shift:=xlToLeft Rows("5:5").Delete Shift:=xlUp End Sub (SoulMan) 2020/05/02(土) 07:52
ありがとうございます。
教えていただいたすごく参考になりました。
これから活用させていただきたいと思います。
説明不足で一つ、後付けという形になってしまい申し訳ないのですが
C5セルを空白の行まで反映させるが
D5セルが空白だった場合C列のみの反映し他の列はコピーさせずにスルーさせたい
C5セルD5セルにもデータが入力されていたら
CD列のみ空白の行まで反映 (EFG列はコピーさせずにスルーさせたい)
C5セルD5セルE5セルにも入力されていたら
CDE列のみ空白の行まで反映(FGはコピーさせずにスルーさせたい
という形は可能でしょうか
空白になる最終行はどの列も同じになります。
すみませんがこれが可能でしたら教えていただけたらと思います。
(へぼ助bb) 2020/05/02(土) 11:19
また、Valueプロパティを直接参照してるので、値を転記したいということだとおもいますが、それなら値貼付すればよいです。
さらに、追加の「空白なら無視する」設定も「形式を選択して貼り付け」で対応できます。
Sub 数値の反映_改() If Cells(Rows.Count, "C").End(xlUp).Row < 5 Then MsgBox "データなし" Exit Sub End If
Range("C5", Cells(Rows.Count, "C").End(xlUp)).Resize(, 4).Copy Range("K10").PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True End Sub
(もこな2 ) 2020/05/02(土) 13:01
すみません。よくよく読み返すと値だったんですね(^^; ところで、、↓これって途中に空白があるんですよね? >C行が空白になるまでついでに列も空白になるまで選択して
私も最初は下からかなと思ったんですが、、、範囲の選択って難しいでしょ? 色んなレイアウトがありますからね 以前もどこかで書きましたが永年書いていても悩むところではありますよね?
で、本当は下から上になんでしょうけど、、空白まで。。。となると 上から下なんですね。でもこれはもろ刃の剣である意味不確かで場合によっては禁じ手なんですよね 作成者の暗黙のルールで必ず下に何かある。例えば表の中の合計とか。。。。 そんなこんなを全部含めて設計しないと一概には言えない部分があると思います。
下から上だとFindの逆とかRangeの End(Xlup) とか色々あるんですけどね。。。 最初のご質問の趣旨からしますと全然シンプルじゃないので多分違うと思いますけど、、 まぁ、、ジャブ程度でお願いします。。。。
Option Explicit Sub てすと() Dim MyA As Variant Dim r As Range Dim 最大値 As Long Select Case True Case Application.CountA(Range("C5:E5")) = 3 For Each r In Range("C5:E5") If 最大値 < r.End(xlDown).Row Then 最大値 = r.End(xlDown).Row Next MyA = Range("C5", Range("E" & 最大値)).Value Case Application.CountA(Range("C5:D5")) = 2 For Each r In Range("C5:D5") If 最大値 < r.End(xlDown).Row Then 最大値 = r.End(xlDown).Row Next MyA = Range("C5", Range("D" & 最大値)).Value Case Application.CountA(Range("D5")) = 0 MyA = Range("C5", Range("C5").End(xlDown)).Value End Select Range("K10").Resize(UBound(MyA, 1), UBound(MyA, 2)).Value = MyA End Sub (SoulMan) 2020/05/02(土) 14:08
あるデータを取得するときはC5からC60
あるデータを取得したときはC5からC55
あるデータを取得したときはC5からD55
あるデータを取得したときはC5からE35
あるデータを取得したときはC5からF65
途中のセル途中に空白はない
というルールで
取得された範囲のみを特定の場所にコピーというか反映をさせられればと
なんとか考えていました。
もっと勉強してみます。
ありがとうございます。難しいですね。
(へぼ助bb) 2020/05/02(土) 17:49
Sub test() With Range("C5") With .Resize(.End(xlDown).Row - .Row + 1, .End(xlToRight).Column - .Column + 1) Range("K10").Resize(.Rows.Count, .Columns.Count).Value = .Value End With End With End Sub
(kazuo) 2020/05/02(土) 18:53
衝突しました。。。そのまま投稿します。。。 そこまでわかっているのなら全然難しくないですよ こういう掲示板では見えないもの同士がやり取りしているわけですから 色んなパターンを考えざるをえないんです。
あるデータという条件がどんな条件なのかわかりませんが、 優先順位の付け方だけ間違わない様に応用してください。 そんなに難しくないです。。。
Option Explicit Sub てすと() Dim MyA As Variant Select Case True Case Application.CountA(Range("C5:E5")) = 3 'あるデータを取得したときはC5からE35 MyA = Range("C5:E35").Value Case Application.CountA(Range("C5:D5")) = 2 'あるデータを取得したときはC5からD55 MyA = Range("C5:D55").Value Case Application.CountA(Range("D5")) = 0 'あるデータを取得したときはC5からC55 MyA = Range("C5:C55").Value End Select Range("K10").Resize(UBound(MyA, 1), UBound(MyA, 2)).Value = MyA End Sub (SoulMan) 2020/05/02(土) 18:56
Sub test() Dim rw As Long, cl As Long With Range("C5") rw = .End(xlDown).Row If .Offset(1).Value = "" Then rw = .Row cl = .End(xlToRight).Column If .Offset(, 1).Value = "" Then cl = .Column With .Resize(rw - .Row + 1, cl - .Column + 1) Range("K10").Resize(.Rows.Count, .Columns.Count).Value = .Value End With End With End Sub
(kazuo) 2020/05/02(土) 21:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.