• ベストアンサー

エクセル2003VBAで選択範囲

いつもお世話になっています。 エクセル2003を使用しております。下記を関数又はVBAの組み方・構文を教えて下さい。 (1)E列には、「1」と「.」と「空白」が入っています(「1」が入ってないケースもあります)が、「1」を検索します。もし「1」が無ければ、J列を同様に検索します。(中身はE列と同じです) (2)「1」が入っているセルから見て、「行」の±10の範囲内を選択し、別シートにコピーする。 例1. 1が入っているセルが、「E15」とします。 この場合、コピーしたい範囲は、5行目全部~25行目全部です。 例2. 1が入っているセルが、「E17」とします。 この場合、コピーしたい範囲は、7行目全部~27行目全部です。 分かりにくいかもしれませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#187541
noname#187541
回答No.1

こんばんは。 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

maintec
質問者

お礼

回答ありがとうございました。 回答者様に教えて頂いたVBAで解決しました。 ありがとうございます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

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

maintec
質問者

お礼

回答ありがとうございます。 機会があれば教えて頂いた関数を使ってみたい思います。

関連するQ&A

  • EXCEL VBA 空白行を含んだ範囲選択

    EXCEL VBA超初心者です。 EXCELのVBAについての質問です。 以下のような、日ごとのお金の貸付、返済の一覧データがあります。 例 A B C D E 1 年  月 日 貸付  返済 2 2008 5 10 10000 3 2008 6 10      8000 4 2008 7 10 20000 5 2008 8 20      7000 ・データの行数は決まっていません。 ・最後の行が「貸付」で終わることもありますし 例のように「入金」で終わることもあります。 ・各データには必ず「年」「月」「日」が入力してあります。 VBAで、A2セルからE5セルを範囲選択するには どのように記述したらいいですか? ちなみに自分で色々と調べてみて Selection.SpecialCells(xlCellTypeConstants, 23).Select としたのですが それだと空白セル(例でいうとE2やD3セル)が選択されず とびとびになってしまいました。 ご教授お願いいたします!

  • データの一部範囲について、並替等のVBAを作りたい

    データの一部範囲について、並べ替え等のVBAを作りたい。 次のようなVBAを作りたいのですが、当方知識がほとんどないためお力を貸してください。 データの内容 A列たてに2行目「6時台」12行目「7時台」というふうに、10行くらいおきに「○時台」の文字が24時台まで入る B列~C列A列にあわせた行数の文字列が入る E列~N列関数式の入ったデータが入る、A列~C列のからデータにあわせてデータより余分に関数式が入りデータ空白はIF(B="","", )で空白扱い。 処理したい内容 まず例として11時台~12時台の範囲(11時台のセルから13時台の文字の前の行まで)についてのみ対象として E列~J列までを、たて一列にする。E1~Exその下にF1~FxというふうにJ列まで。ただし並べ順はE,G,H,F,I,Jのようになる。 この場合の「E1」とは11時台のセル行位置 次にH~N列の矩形をそのままCopy これらのデータをテキストとして作成保存 時間の範囲は、A1に入るデータの日付(Bookごとに異なる)による曜日によって異なるので 「固定式」をいくつか作ってcaseで選択を予定していますが 汎用性として、最初の時間とうしろの時間を指定する任意の範囲式も作っておきたいです。 現在は、boxで時間を入れ、検索で○時台を見つけその上に空白行を3行入れ 続いてうしろの行も時間指定により3行空白を入れ、データ(関数式)の途切れる範囲内を作り、 その場所に手動でジャンプさせ、並べ替えマクロを動作さテキスト化しています。 また矩形部分はマウスで範囲を反転させたものをCopyしてそのテキストにあとから貼り付けています。 全体を対象としたVBAはここで作成していただいたのですが、途中の一部範囲を対象としたものが必要になったためお知恵をお借りしたいと思います。 よろしくお願いします。 Windows7/Office2013

  • エクセル2003のVBAの範囲選択について質問です。

    エクセル2003のVBAの範囲選択について質問です。 OSはXPです。 Range("B1:C" & Range("A" & Cells.Rows.Count).End(xlUp).Row).Select この意味は、B1セルからC()の範囲指定をするのに、()をA列の最終行を探すことによって指定する、ということだと思います。いろいろなサイトを参照させてもらいました。 この場合のA列の最終行を探す方法は、A列のデータが歯抜けの場合に正しく探せないので、一旦最終行を探し、そこから上に見に行って最初にデータが入っている行を探している、で正しいと思います。 私が知りたいのは、逆に歯抜けの場合はそこを最終行として指定する方法です。つまり、一旦最終行を探し、上に見に行くのではなく、A列の上から下に見に行って、空白(歯抜け)が見つかったところを最終行と指定する方法です。xlDownを使うのだろう、というところまでは判ったのですが、どうにもその先が判りません。 歯抜けの場合の方がマイナーなのか、この方法を具体例を記載しているサイトを見つけることができませんでした。 よろしくお願いいたします。

  • エクセルVBA AdvancedFilterの範囲

    エクセルVBAのAdvancedFilterのついて教えてください AdvancedFilterは検索条件をCriteriaRangeで指定するかと思うのですが、そのつど変更することは可能なのでしょうか 現在、B3からO3に検索するための「見出し」が入力されています B4からO4に検索したい文字を入力しCriteriaRange:=Range("B3:O4")としてきたのですが、検索を増やし場合があります B5からO5にも入力し、Range("B3:O5")とすればいいのでしょうが、そのつど検索範囲を変更するのは大変です あらかじめRange("B3:O5")としてしまうと、4行目までしか入力しなかった場合に、5行目がORで検索されるので、余白行が検索されることになりすべてのデータを抽出してしまいます 最大でも10条件用意しておけば足りると思うので、Range("B3:O13")としたいです "空白セルの場合は、上の行をコピーする"と命令させておけば、空白セルがなくなりすべてのデータを抽出してしまうということは回避できるのかな?と考えたのですが、どのように実現するか分かりませんでした それか、"最終行を認識し、そこまでの範囲とする"とか"余白セルを無視する"ことも可能なのでしょうか 自分が思いついたやり方でなくでも構わないので、検索のつど範囲を変更できる方法があれば教えてください よろしくお願いします

  • 矩形範囲の複数列を縦1列に並べ替えエクセルVBA

    データD1~H50にデータがあるとします。 これを D列データ(1~50行) E列データ(1~50行) F列データ(1~50行) G列データ(1~50行) H列データ(1~50行) と縦1列(計250行)に並べ変えたいのですが 次の条件によるVBAを教えていただけますか。 D1にカーソルを置く(アクティブセル) (または自動的にD1から対象とする※この例ではD1ですが、C1等に変更する場合有り) I列にはデータがない 51の行にはデータがない すなわち完全孤立矩形です。 D1~50行の途中に関数式のある空白セル(""による非表示、)がある場合その行は削除 D列1行目のセル名をファイル名としてテキスト(外部ファィル)を作成(同一ファイル名の上書きを回避) なお、A,B,C列、I列や51行にデータが続いていた場合、一定の範囲を囲ってその部分について同作業をする場合のVBAもあわせてお願いします。 その場合のファイル名は範囲左上のセルが対象。 よろしくお願いします エクセル2013Pro Windows7Pro(SP1)

  • VBAにて範囲選択およびコピーの方法について

    連休中失礼いたします。VBA初心者です。 VBAにて範囲選択の方法およびコピーの方法について教えてください。 (1)範囲選択の方法  まず最初の条件としてD列における値が1.0以上(数値表記は少数点)の場合に限り、 それに該当する行をコピー(A~D列)したいのですが… この方法をVBAの式で表したいのです。  範囲選択として求めたい範囲は、下表で行くとRange(”A3:D6”)の範囲を選択したいのです。  ※D列における値が1.0以上の条件の指定までは、何とかできてそうな感じなのですが、   その条件を満たす、範囲選択がうまくできません。 (2)コピーの方法  (1)で選択した範囲を、選択sheetを変更して貼り付けたいのですがどのようにしたらよろしいでしょうか??       A列     B列     C列      D列 1行    13     10      10      0.5 2行    10     8       7       0 3行    11     9       7       1.0 4行    9      25      18      1.5 5行    8      43      23      1.5 6行    7      12      23      1.0 7行    6      23      43      0.5  8行    15     23      54      0 … …

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • 複数行の最下行の範囲選択

    こんにちは、マクロ初心者です。    A  B  C  D  E  F  G  H  I 1  あ  あ  あ        あ  あ     あ 2  あ  あ  あ        あ  あ     あ 3  あ     あ                 あ 4        あ                 あ 5        あ                 あ 6        あ                 あ 7        あ                 あ 8        あ                 あ 9        あ 10 上記のような表があるとき セル"A"列から"I"列までの最下行にあたる行を検索し、 更に最下行までの範囲をコピーして、別シートにコピーさせたいのです。 (上記の例だと、セル"A1"~"I9"の範囲をコピーする) Range("A1", Range("I1").End(xlDown)).Select Selection.Offset(0, 0).Select 上記のコードでできると思ったのですが、なぜか不必要な範囲まで選択されてしまいます。 (下方向に数行余計に選択されてしまう) これではダメなのでしょうか? ちなみに、数式などは入っておらず、入力されていないセルは全て空白です。 A列だけの最下行を選択するというのは簡単に出来たのですが、このように複数の範囲を 選択する場合は、どのようにコードを書くべきでしょうか。 マクロのスキルが無い為困っています。 アドバイスをよろしくお願いいたします。

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • エクセル:VBAで範囲選択について

    クリックしたセルを操作者に目立たせるために、 ActiveCell を交差する形で、行と列の反転表示を試みています。 例:D6セルをクリックすると、D列と6行を同時に範囲選択させる   Range("D:D,6:6").Select クリックしたセル番地は、 ActiveCell.Column ActiveCell.Row で求まると思うのですが、それから先の処理方法が思い浮かびません。 よろしくお願い致します。

専門家に質問してみよう