[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別シートへ転記』(はとむぎ)
VBA勉強中です。
下記は一部抜粋したものですが、なんとかもっと簡単に出来ないものかと
考えています。
☆.Range("A" & s) = Range("A" & i) この部分以下14行の部分を簡単に表す方法は無いでしょうか?
With Worksheets("リスト") For i = 6 To j If Range("D" & i) <> "済" Then .Range("A" & s) = Range("A" & i) .Range("B" & s) = Range("B" & i) .Range("C" & s) = Range("C" & i) .Range("D" & s) = Range("E" & i) .Range("E" & s) = Range("F" & i) .Range("F" & s) = Range("G" & i) .Range("G" & s) = Range("I" & i) .Range("H" & s) = Range("J" & i) .Range("I" & s) = Range("L" & i) .Range("J" & s) = Range("M" & i) .Range("K" & s) = Range("N" & i) .Range("L" & s) = Range("O" & i) .Range("M" & s) = Range("Q" & i) .Range("N" & s) = Range("S" & i) s = s + 1 End If Next i
< 使用 Excel:Excel2016、使用 OS:Windows10 >
1案 If Range("D" & i) <> "済" Then .Range("A" & s).Resize(, 3).Value = Range("A" & i).Resize(, 3).Value .Range("D" & s).Resize(, 3).Value = Range("E" & i).Resize(, 3).Value .Range("G" & s).Resize(, 2).Value = Range("I" & i).Resize(, 2).Value .Range("I" & s).Resize(, 4).Value = Range("L" & i).Resize(, 4).Value .Range("M" & s).Value = Range("Q" & i).Value .Range("N" & s).Value = Range("S" & i).Value s = s + 1 End If
2案 For i = 6 To j If Range("D" & i) <> "済" Then For k = 1 To 14 n = Choose(k, 1, 2, 3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 19) .Cells(s, k).Value = Cells(i, n).Value Next k s = s + 1 End If Next i
(ピンク) 2020/05/01(金) 17:51
With Worksheets("リスト") .Range("A" & s) = Range("A" & i)
みたいに書いたら
Worksheets("リスト").Range("A" & s).Value = ActiveSheet.Range("A" & i).Value
って書いたことになりますけどそれで大丈夫なんです?
(もこな2 ) 2020/05/01(金) 18:01
もこな2様
そのつもりで書いています。
間違った書き方かもしれませんが、思い通りには動いていますよ。
(はとむぎ) 2020/05/01(金) 18:08
また、Valueを直接参照して値貼付の代わりをするやり方を否定するものではないですが、今回のケースでいえば、コピーして、普通に値貼付すれば楽なんじゃないかとおもいました。
Sub 実験01() Const i As Long = 100 Const s As Long = 2
Dim tmp As Range Dim MyRNG As Range
With ActiveSheet For Each tmp In .Range("D6", .Cells(i, "D")) If tmp.Value <> "済" Then If MyRNG Is Nothing Then Set MyRNG = tmp Else Set MyRNG = Union(MyRNG, tmp) End If End If Next tmp
If Not MyRNG Is Nothing Then Intersect(MyRNG.EntireRow, .Range("A:G,I:J,L:O,Q:Q,S:S")).Copy Worksheets("リスト").Cells(s, "A").PasteSpecial Paste:=xlPasteValues End If End With
End Sub
(もこな2 ) 2020/05/01(金) 20:13
Sub 実験01() Const i As Long = 100 Const s As Long = 2
Dim srcSH As Worksheet Dim tmp As Range Dim MyRNG As Range
Set srcSH = ActiveSheet
For Each tmp In srcSH.Range("D6", srcSH.Cells(i, "D")) If tmp.Value <> "済" Then If MyRNG Is Nothing Then Set MyRNG = tmp Else Set MyRNG = Union(MyRNG, tmp) End If End If Next tmp
If Not MyRNG Is Nothing Then Intersect(MyRNG.EntireRow, srcSH.Range("A:G,I:J,L:O,Q:Q,S:S")).Copy Worksheets("リスト").Cells(s, "A").PasteSpecial Paste:=xlPasteValues End If
End Sub
(もこな2 ) 2020/05/01(金) 20:19
(マナ) 2020/05/01(金) 21:24
With Range("A5:S" & j) .AutoFilter 4, "<>済" If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then Intersect(.Offset(1), Range("A:C,E:G,I:J,L:O,Q:Q,S:S")).Copy Worksheets("リスト").Range("A" & s).PasteSpecial xlPasteValues End If .AutoFilter End With
(マナ) 2020/05/01(金) 21:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.