• 締切済み

エクセルVBA セルの抽出とコントロール

エクセルVBAについての質問です。 結論から言いますと、添付ファイルのエクセルシートで以下の処理をしたいです。 1.「有無」の列の内容を判断し、「有」となっているもののみ、 E列に表示。 2.このままだと、抽出結果の行が飛び飛びになってしまう。 たとえば、「福利厚生費」の下は「荷造運賃発送費」となるが、間に3行 空いてしまう。これをしっかりくっつける形で処理されるようにしたい。 ※データ並び替えの機能を使えばできるように思うが、そうすると50音順等になってしまうのでできない。 3.販売管理費抽出のコントロールボタンを押せば、上記の処理がなされるようにしたい。 以上です。VBAの教科書をあさってみましたが、どうも応用の仕方が分かりませんでした。 お忙しいところまことに恐れ入りますが、ご検討の程お願いします。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

一例です Sub test() Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1).Value = "有" Then Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = Cells(i, 2).Value Next i End Sub こんな方法も有るんだ程度で

JUN3845
質問者

お礼

すごい!!! マジ助かります。本当にありがとう^^。 感謝致します。

全文を見る
すると、全ての回答が全文表示されます。
  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.1

Dim i As Long Dim dest As Long dest = 2 '書き込み開始行 For i = 2 To Range("A2").End(xlDown).Row '2行目から最終行まで If Range("A" & i) = "有" Then Range("E" & dest) = Range("B" & i) '勘定科目をE列に入力 dest = dest + 1 '書き込み先の行を1加える End If Next i これで実現できると思います

JUN3845
質問者

お礼

ご親切、かつ丁寧な回答をいただき、まことに有難うございました。 本当に助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA 日付で抽出、並び替え

    こういう場で初めて質問させていただきます。 どうぞよろしくお願いします。 エクセルVBAで日付(月毎)でデータを抽出し、並び替えを行いたいのですが, B列に日付が入りC~F列には帳簿の仕訳が入ります。 ここで B2 に日付が入って、C2~F2とC3~D3にデータが入った場合に オートフィルタをかけたら、3行目は日付の欄が空白なので うまく抽出できません。 なお、2行目と3行目は1つの仕訳なのでばらばらになるのも困ります。   仕訳は最低1行から最大で6行になります。 このように日付欄は1行だけど、その日付に対応する内容が数行に渡って入るような場合に日付から月毎にデータ抽出するには どのようなコードを書けばいいのでしょうか? A B    C      D     E    F  日付 借方科目 金額 貸方科目 金額  10/10 消耗品  300    現金   500        雑費   200   10/9   交際費  500    現金   500   10/8    雑費   200     現金   200 汚い表ですが、上記のような場合です。 10/10の分は2行で1つになりますので、このような場合です。 どうかよろしくご指導お願いします。 

  • EXCELのVBA-フィルタ抽出後のセル選択方法

    EXCELのVBAです。  オートフィルタ(Autofilter)で、何らかの条件で抽出をかけた後の部分で、 特定のセル、例えば、2列目の上から5番目のセル、を選択するには、 どうすれば良いでしょう?  言い方を変えれば、可視セルの中だけで、何列目で何行目セルという指定 をするにはどうすれば良いかと。  RangeとかSelectionで、指定する方法が有るのでしょうか? よろしくお願いいたします。

  • 《エクセル2000VBA》「コメント」を抽出することはできますか

    こんにちは、VBAを勉強中の者です。 任意のシート(20000行×30列くらいでデータが入っています)に入力されているコメントのみを別シートに抽出し、一列に一覧表示させたいです。 自分でも調べてみて、とりあえずコメントは操作可能ということはわかったのですが、 ・任意のシートの中身を行と列の二次元に検索していく方法(特定の行のみ検索するコードはあちこちで見受けられるのですが) ・拾ったコメントの内容を別シートに書き込むのを「高速で」行う方法(その都度書き込んでアクティブセルを移動させる…というのならわかるのですが、データの量が膨大なので、これだと途方もない時間がかかってしまいそうです) 以上の方法がわからないでいます。 また、抽出したコメントは、配列関数を使えば処理が早いのでしょうか。 となると、書き込む件数が何件発生するかわからない場合はどうするのだろうか、と行き詰まっています。 (さらに贅沢を言いますと、コメントが入っていたセル番号が隣の列に入っているといいな、という希望もありますが、これはあくまで第二希望です) VBA勉強中ですので、パーフェクトに動くコードでなくても構いません。断片的なヒントでも大歓迎です。 VBAに詳しい方、ご教示頂けますでしょうか。

  • エクセルVBAで、ある文字を含んでいたら別シートに抽出したい

    エクセル2002を使っています。 シート1に  A列に氏名  B列に住所  C列に電話番号 のデータが300件の表があります。 B列を検索してたとえば大阪府があれば、その行(ABC列)をシート2へコピーして抽出したいのです。  VBAを使ってやりたいのですがどうしたらよいでしょうか? よろしくお願いします。

  • エクセル抽出について

    初歩的な質問で大変恐縮です。 エクセルで10列×5行でひとまとまりの下に続く表があり、その中の1列目2行目に入力してある「支店」別にデータを抽出したいと思っています。オートフィルタを使うと1行づつなら抽出できるのですが、10列×5行のまとまりごと抽出する方法はありますでしょうか? つたない文章で申し訳ありませんが、ご教授ください。

  • エクセル VBA でVLOOKUPにて不特定数の行の抽出を繰り返す。

    エクセルVBAについて教えてください。 工場の品種ごとの使用材料の計算を作っているのですが、 各品番のリストがあり5桁の品番コードをキーにしてそれに使用されている材料を別リスト(別なシートにある)から抽出しリストを作成したいです。使用されている材料は5~10種と抽出する、列が不特定数あるのので、関数だとかっこ悪くなってしまいそうなのでVBAにチャレンジしたいのですが。可能でしょうか。 品番コード 83764→    83764に使用されている行を5行抽出 82727→    82727に使用されている行を8行抽出 25124→    25124に使用されている行を11行抽出。 必ず同じ行数あるわけではないので83764に使用されている材料を5行抽出した後に空欄まで下に移動して次の82727に使用されている行を8行抽出というようにしたいのですが。 不備後不明な点あればお願いします。

  • エクセルでランダムに抽出後、一つのセルにまとめる方法

    エクセル初心者です。 エクセルのシート1に A列の1行目~10行目にA~Jまでの文字が入力されています。 これをシート2の B列の1~100行目に シート1からランダムで抽出した3つ又は4つの文字を ACE DFG ・・・・ のように埋めるには、どのような式を入れればできるのでしょうか? 文字はだぶらないように抽出したいと思います。 文字はCAEのように、順番が逆になっても構いません。 むしろ時々逆になったりするほうが都合がよいです。 抽出される文字数も、3つだけでなく、ランダムで4つ抽出するときも あるようにしたいです。 オフィス2003を使用しています。 ご回答よろしくお願いします。

  • エクセルのセルにVBAで(  )付の式

    エクセルのVBAで作業していますが、1つの列の全ての行を (  )付けとしたいのですが、式をお教え下さい。 例えばD列に数値AB123と入れたら(AB123)となるようにしたいのです。 現在のVBA式にはD列のカラミはありません。 単純に追加すればいいと思いますので・・・・ よろしくお願い致します。

  • EXCEL VBAについて

    いつも識者の皆様にはお世話になっております。 Excel VBAのことで質問させてください。 下記のようなシートがあります。 データの状態は下記です。 1. 1行目は必ずタイトル行になっています。 2. 1行目が「入荷_1」になっている列以降の日付はシリアル値となっています。 ※必ずしもG1が「入荷_1」となっているとは限りません。H1だったりI1だったりします。 VBAでやりたいことは下記です。 1. 過去取引と現在取引の状態によってA列に入力する文字列を変える。 過去取引_1=有 現在取引_1=有 の場合 「OK」 過去取引_1=有 現在取引_1=無 の場合 「NG」 過去取引_1=ブランク 現在取引_1=有 の場合 「確認要」 2. 「入荷_1」以降の列で「入荷_1」「出荷_1」など、アンダーバー以降の文字列が同じになっている2列を一まとめとして、そのどちらかもしくは両方に日付の入っているセルを探し、その列の1行目の、アンダーバーの次の文字から最後の文字までを[]で囲んだ文字列をB列に入力する。 ※_1にも_2にもある場合は、アンダーバーを使って文字列を連結する。(B2セル) ※パイナップルやぶどうのように入荷か出荷のいずれかにしか日付が入っていないものもある。 3. タイトル行が「入荷_1」となっている列以降で日付の入っている列を探し、出荷から入荷を引いた数字をC列に入力する。 ※_1にも_2にもある場合は、アンダーバーを使って文字列を連結する。(C2セル) これを2行目から1行ずつ最後の行まで行い、かつ、このシートはブックにある複数のシートの中の1つですが、BA1セルが空白ではないシートにだけこの処理をしたいのです。 どうやらSelect Caseという構文を使えばできそうだというところまで突き止めたものの、条件が僕には複雑すぎて(特に2列を1まとめにするところ)まったく進みません。 どなたか、上記内容の場合どのような構文になるのか教えていただけませんでしょうか。 よろしくお願いいたします。

  • Excel 複雑なセル埋めのVBA

    エクセルで入力済みのデータをテーブル形式にするためにVBAを組んでいますが突き当たりました、お知恵を拝借させてください。現在成形出来ているのは以下の状態です。    A列     B列    C列 1行  AA      2     1 2行 3行  BB      3     2 4行 5行 6行 7行 8行 9行  CC      2     3 10行 11行 12行 13行 14行 これを以下のようにB列を埋めたいと考えています。A列を埋めるVBAは当方で分かります。      A列    B列    C列 1行    AA     1     1 2行    AA     2 3行    BB     1     2 4行    BB     2 5行    BB     3 6行    BB     1 7行    BB     2 8行    BB     3 9行    CC     1     3 10行   CC     2 11行   CC     1 12行   CC     2 13行   CC     1 14行   CC     2 B1に2が入っていてC1に1が入っているときはB1から下へ1,2の連番を1回入れます、B3に3と入っていてC3に2と入っているときはB3から下へ1,2,3の連番を2回繰り返します、同じようにB9以降も処理しています。連番のスタートは必ず1で、現在B列に入っている数字が連番の最後に当たる数値でC列が繰り返し回数という事です。上の例ではB列を書き直していますが、新たにD列にB列に入れたい連番の列を作る方法でもいいと思っています。 もし表が崩れていたら済みませんでした。恐れ入りますがポインタでも結構ですのでご教授下さい、よろしくお願いします。