- ベストアンサー
エクセル2003VBAで選択範囲
いつもお世話になっています。 エクセル2003を使用しております。下記を関数又はVBAの組み方・構文を教えて下さい。 (1)E列には、「1」と「.」と「空白」が入っています(「1」が入ってないケースもあります)が、「1」を検索します。もし「1」が無ければ、J列を同様に検索します。(中身はE列と同じです) (2)「1」が入っているセルから見て、「行」の±10の範囲内を選択し、別シートにコピーする。 例1. 1が入っているセルが、「E15」とします。 この場合、コピーしたい範囲は、5行目全部~25行目全部です。 例2. 1が入っているセルが、「E17」とします。 この場合、コピーしたい範囲は、7行目全部~27行目全部です。 分かりにくいかもしれませんが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんばんは。 VBAです。 Sheet1からSheet2のA1に貼り付けます。 Dim Rng As Range With Worksheets("Sheet1") Set Rng = .Columns("E").Find(What:="1", After:=Range("E1"), LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False) If Rng Is Nothing Then Set Rng = .Columns("J").Find(What:="1", After:=Range("J1"), LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False) End If .Rows(Rng.Row - 10 & ":" & Rng.Row + 10).Copy Worksheets("Sheet2").Range("A1") End With
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
VBAでは出たので、関数でやってみました(imogasi方式) しかしE列かJ列かの、J列の1の場合を取り入れることが出来ていません。一応参考に。 VBAでやるほうがぴったりできると思います。 ーー 例データ Sheet1のA1:J15 (J列は作業列) 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33 34 36 37 38 39 1 41 42 43 44 46 47 48 49 2 51 52 53 54 56 57 58 59 3 61 62 63 64 1 66 67 68 69 4 71 72 73 74 76 77 78 79 5 81 82 83 84 86 87 88 89 6 91 92 93 94 96 97 98 99 7 101 102 103 104 106 107 108 109 111 112 113 114 116 117 118 119 121 122 123 124 126 127 128 129 131 132 133 134 136 137 138 139 141 142 143 144 146 147 148 149 151 152 153 154 156 157 158 159 下記例では(簡略のため)+-3行をSheet2へ引っ張っています。 J1に =IF(OR(MATCH(1,$E$1:$E$100,0)-4>=ROW(),MATCH(1,$E$1:$E$100,0)+4<=ROW()),"",ROW()-MATCH(1,$E$1:$E$100,0)+4) 下方向に式を複写 上記例のJ列 Sheet2で A1は =INDEX(Sheet1!$A$1:$J$100,MATCH(ROW(),Sheet1!$J$1:$J$100,0),COLUMN()) I1まで式を複写。 A1:I1の式をA7:I7まで式を複写 結果 31 32 33 34 0 36 37 38 39 41 42 43 44 0 46 47 48 49 51 52 53 54 0 56 57 58 59 61 62 63 64 1 66 67 68 69 71 72 73 74 0 76 77 78 79 81 82 83 84 0 86 87 88 89 91 92 93 94 0 96 97 98 99
お礼
回答ありがとうございます。 機会があれば教えて頂いた関数を使ってみたい思います。
お礼
回答ありがとうございました。 回答者様に教えて頂いたVBAで解決しました。 ありがとうございます。