• 締切済み

エクセルマクロ 条件設定処理と名称変更保存

みなさまいつも大変お世話になっています。 またもやCSV形式なのですが、拡張子がCSVではありません (1)A15行目に%DATAとありそれ以降の行を対象としたいのですが  いつも15行目なのかどうかが、不定ですが%DATAと書かれてある行以降というのは間違いありません。 (2)H16からH列に数値が記入されてありそれに80を加算したい (3)A16からは、A,B,C,Dと入力されてあり Dの行に対しては加算の処理を行わず元々の数値としたい。 (4)%DATAと書いてある行以下の量は不定量ですが最終行には*が入っています (5)ファイル名は****-DRF.CHKを****-DRR.CHKとして保存したい 可能ならばフォルダー内の対象ファイルを自動で処理できると ありがたいです。 いつもお願い事ばかりで申し訳ありませんが よろしくお願いします

  • hou66
  • お礼率50% (79/155)

みんなの回答

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.3

はじめまして >可能ならばフォルダー内の対象ファイルを自動で処理できると ありがたいです。 この部分には「dir」関数を使用します。 例えば、対象ファイルがあるフォルダ内のテキストファイルだとしたら Filename = Dir([フォルダのフルパス] & "\*.txt") Do While Filename <> "" [処理] Filename = Dir() Loop でできます。Dir関数は引数を省略すると、前回と同じ条件で次のファイルを探します。 VBAはヘルプが丁寧なので、詳細はヘルプで確認してください。

hou66
質問者

お礼

ありがとうございます。

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

課題の丸投げではないですか。規約違反。 それほど難しい話題ではない。 A列の中で%DATAという行をFindメソッドで見つけ、その行の次行以下最終行までの全、判別処理は行うわけだ) %DATAのある初出行 Sub test03() r = Range("A1:A100").Find("%DATA").Row MsgBox r End Sub 最下行は Sub test04() d = Range("A65536").End(xlUp).Row MsgBox d End Sub を参考に。 >A16からは、A,B,C,Dと入力されてあり Dの行に対しては加算の処理を行わず A列各行にはA16からは、A,B,C,Dのどれかが入力されているということか。 それなら If Cells(i,"A")<>"D" Then (処理) End If など参考にしてください。 >)ファイル名は****-DRF.CHKを****-DRR.CHKとして保存したい 「SaveAs VBA」でWEBを照会のこと。 http://excelvba.pc-users.net/fol4/4_4.html など多数 フォルダ内の全ファイル名を捕まえるコードは、WEBで「フォルダ ファイル名 VBA」ででも照会してみること。

hou66
質問者

お礼

ありがとうございます。 とりあえず、Findメソッドも使用したほうが良いとは思うのですが そこまで考えがるのをやめ A15にあるものとして作業し H16から以降のみ作業行うようにしました。 過去多くの方々から教わった内容で処理しました。 Sub test01() Dim rng As Range Columns("i:i").Insert Shift:=xlToRight Set rng = Range("h16", Range("h65536").End(xlUp)) rng.Offset(, 1).Formula = _ "=IF(RC[-8]=""D"",RC[-1],RC[-1]+80)" rng.Offset(, 1).Value = rng.Offset(, 1).Value Columns("H:H").Select Selection.Delete Shift:=xlToLeft End Sub あとは、ファイル保存と一括処理の部分になるかと思います。 結構急いでいたものですから 丸投げみたいな形になってしまいました

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

・A列の値を順次取得する。 ・A列に%DATAがあったらフラグを立てる。 ・フラグが立っている状態で、A列の値がA,B,Cの時は同行のH列の値に  +80、Dの時は何もしない。 ・A列の値が*になったら終了。 まずひとつのシートに対して、この様な作業を行なうようコード化する。 上手くいったらフォルダー内のファイルに対して、順次同じ作業を行なうようにする。 保存する時は名前を変更するコードを作る。 と言ったように順序立てて行なってみては如何でしょうか。

hou66
質問者

お礼

ありがとうございます。

関連するQ&A

  • エクセルのマクロについて

    列がA~S、行が不定のエクセルのデータをソートしたいのですが、どうしたらできますか?行が不定なので全くわからない状態です。

  • このようなエクセルマクロを組みたいのですが...

    下記のようなマクロを組みたいと思っていますが、 知見がほとんどないので教えていただきたいと思います。 "csv"というフォルダにランダムなファイル名でcsv形式のファイルが100以上保存されています。 目的は、 そのcsvファイル内の一部のデータをひとつのファイル(ファイル名を"まとめ"とします)に移して並べたいと思います。 <前提> "csv"フォルダと"まとめ"ファイルは既に開かれている状態とします。 "まとめ"ファイルを開いた状態で、マクロを走らせると、 (1)csvファイルが開く (2)セルA1とB1をコピー (3)"まとめ"ファイルのA1、A2へ貼り付け(行と列を変更) (4)csvファイルを閉じる (5)次のcsvファイルが開く (6)セルA1とB1をコピー (7)"まとめ"ファイルのB1、B2へ貼り付け(行と列を変更) (8)csvファイルを閉じる 以降、"csv"フォルダの中身をすべて処理できるまで繰り返し。 という風に考えていますが、 当方あまり知識が無くアレンジが難しいためできる限りシンプルにと考えています。 そのため、もしこうした方が...等あればアドバイスいただけるとありがたいです。 すみませんがよろしくお願いいたします。

  • エクセルの条件付き書式設定マクロについて

    エクセルの条件付き書式設定マクロについて A列からH列まで文字や数字が投入されています。 データが5,000行くらいあって、50行に1回くらい不定期で空白の行が出てきます。 データが入っている全ての範囲において、「C列が空白以外の場合に、 同じ行のA列からH列のセルの上と下を破線?(.Weight = xlHairline)左も右も縦線は実線? (.Weight = xlThin)にする」という条件付き書式を設定したいのですが、マクロが 上手く組めません。 ひとつのセルの条件付き書式の設定はマクロを組めるのですが、 A1:H5000というような広範囲で条件付き書式の設定を組むのが上手くいきません。 教えていただけないでしょうか。

  • マクロ 繰り返し処理について

    マクロの繰り返し処理についておたずねします。 A1~A10に数値、B1~B10にも数値が入っているとします。 C1にA1の数値×B1の数値、C2にA2の数値×B2の数値が入るというように 繰り返し処理を行うにはどうすればよいでしょうか。 A11以降は空白なのでC10にA10×B10の数値が入ってそこで計算が止まるようにしたいと思い ます。例としてA10まで数値を入れましたが条件に一致する間(A列のセルが空白でない)は処理を 繰り返す方法をおたずねします。DO While..Loopが適当と思いますが中々うまくいきません。 ご回答よろしくお願いします。

  • EXCELでマクロを使った検索&自動計算をするには?

    いつもいろんな方に回答いただき大変助かっております。 まずはそのお礼をさせていただきます。ありがとうございます。 さて、本題ですが、 基本データとして「名前」「金額」「とある数値データ」が各々「A列」「B列」「C列」に100件未満が並んでいます。 (例)    A列 B列 C列 1行 あ様 1000  50 2  い様  10   0 ↓  ↓  ↓  ↓ 100  を様 5000 2500  そして別の場所(同じシート内)に「名前」「金額」「とある数値データ」と、同じ内容が書き込めるスペースを作り、ここにデータを入れてマクロを実行すると、既存のデータ(A~C列)の同じ名前の人へ「金額」「とある数値データ」を加算するものを作りたいのです。 (例)【基本データ】    【加算データ】    A列 B列 C列 … F列 G列 H列 I列 1行 あ様 1000  50   名前 金額 数値 ★★ 2  い様  10   0   あ様  10  62 ↓  ↓  ↓  ↓ 100  を様 5000 2500 ←マクロ実行後、5000に10が足される  マクロを実行後は加算データの入力欄(例ではF2:H2)内の数値が消されすぐに次のデータが入力できるように出来れば尚いいです。 また、A列に追加データに入力したF2と同じ名前がなかった場合、I1(★★の部分)に「該当無し」と表示したいのです。 該当がなかった場合は手入力でA列に名前を新しく入力して金額・数値を入力しますので、判定が必要なのです。 このような内容をするにはどうしたらよいのでしょうか? ちなみにマクロの実行は追加欄の近くにオートシェイプなどでボタンを作りクリックすることでマクロを起動させたいと考えています。 乱文かつ長くなりましたが、どなたか指導いただける方よろしくお願い致します。

  • エクセルのマクロで

    エクセルのマクロでこんな処理はできるでしょうか? 元データ表に A列からC列まである数値が5000行にわたって入っています。 例     A B C 1行目 1 4 6 2行目 4 7 8 3行目 5 6 4 4行目 7 8 2 ・ ・ 今、1行目と2行目の間に新たな行を挿入し、 C1セルの値を新たに挿入した行のA列からC列に貼り付けたい。 同様に現時点での2行目と3行目の間に新たな行を挿入し 今度はC2セルの値をその行に貼り付けます。 上の例で言うとこうなります。これを最後の行まで繰り返します。     A B C 1行目 1 4 6 2行目 6 6 6 3行目 4 7 8 4行目 8 8 8 5行目 5 6 4 6行目 4 4 4 7行目 7 8 2 8行目 2 2 2 ・ ・ 元データは5000行あるので、都合1万行になるということです。 このような処理はできるでしょうか? お教えいただけたら幸いです。よろしくお願いします。

  • エクセル 日付比較のマクロ

    以下の処理をエクセルで自動で行おうと思っています。 ___________A列__________________B列 1行目 2008/9-2009/7______終了 2行目 2009/3/12 ____________実施中 3行目 2008/10-2009/8_____終了 4行目 2008/9~2009/7_____終了 5行目 2008/10~2009/8 ___終了 6行目 2009/9/1 ______________実施中 B列が「実施中」でA列が処理日の「翌月以降」の行と B列が「終了」でA列が処理日の「前月以前」の行を 削除するマクロを作成したい。 例:2009/8/10に処理する場合、    A1が 2008/9-2009/7の行は削除対象    A4が 2008/9~2009/7の行は削除対象 A6が2009/9/1の行は削除対象 なお、年月日指定、年月の期間指定(ハイフンと~が混在) の2つの形式がある。 処理日との日付比較をどのように行えば良いでしょうか?

  • [エクセル]処理結果を残して次の処理をさせるには?

    AシートのB~G列の各セルには数値が入っており、全部で数百行あります。 Bシートには、いろいろとデータ処理させる作業用のシートとなっております。 Bシートでは、6つの数字を入力するセルに数値を入力する事でデータ処理がされ、Bシート上で結果が算出されます。 現在はBシートに、Aシートの各行のB~G列の6つの数値を入力してデータ処理をして、結果を算出させています。 ですが、Aシートには数百行もあるので、1行1行の数値を入力して処理させていては時間と労力がかかってしまうので、一気に処理できる方法はないか考えていますが、良いアイディアがありません。 AシートのI列の各行に、Bシートでの処理結果をまとめて算出させる方法はないでしょうか? 例えばAシートのB~G列の各行に 1,2,3,4,5,6 7,8,9,1,2,3 4,5,6,7,8,9 と入力されているとします。 Bシートでは、各行の数字を足す処理をさせるとします。(実際はもっと複雑な処理をさせています) 一気にAシートにBシートでの処理結果を表示させたいと思ってます。 1,2,3,4,5,6,21 7,8,9,1,2,3,30 4,5,6,7,8,9,40 何か良い方法はないかと、ずっと考えているのですが、思い付きそうもなかったので、こちらで質問させて頂く事にしました。 アドバイスをお願い致します。

  • EXCELの「行列を入れ替える」マクロについてどなたか教えていただけないでしょうか?

    EXCELの「行列を入れ替える」マクロについてどなたか教えていただけないでしょうか? 下記のようにならんだDATAがあります。   A列   B列  C列  D列  E列 (1行)2002/12/17 15240 15280 15220 15220 (2行) (3行) (4行) (5行)2002/12/18 15250 15250 15210 15210 (6行) (7行) (8行) (9行)2002/12/19 15220 15310 15220 15310 (10行) (11行) (12行) (13行)2002/12/20 15220 15260 15210 15230 (14行) (15行) (16行) (17行)2002/12/24 15300 15310 15270 15310 (18行) (19行) (20行) (21行)2002/12/25 15300 15340 15300 15600  . . . . . . . . . . . . . . . . . . . . . . . と,このようにDATAは日付の横に数値が4つずつ横に並んでおりますが、この4つの数値をその4つ目の数値の真横のF列から縦に4つ並べたいのですが、一気にできるマクロがないものでしょうか?下記のようにです。   A列   B列 C列 D列 E列  F列 2002/12/17            15240                  15280                  15220                  15220 2002/12/18            15250                  15250                  15210                  15210 2002/12/19            15220 15310 15220 15310                   . . .                    といった感じに一気にマクロで処理してしまいたいのです。DATAはかなりの行数あり、すべて3行の間隔があります。日付の横に4つの数値が規則的に並んでいるというものです。何回でもマクロボタン一発で4つの横に並んだ数値のみを縦に並べた4つの数値にしたいのです。つたない説明で大変申し訳ありませんが、どなたかわかる方お教えくださいませ。

  • エクセル マクロでの繰り返し処理について

    エクセル初心者です。エクセル2010を使用しています。 とあるホームページから、ページをコピーして、エクセルに「テキストで貼り付け」をおこない、 A列に8行の項目が入ります。この8行と次の8行の間には、自然に空白行が1行ずつ入ります。 これは、完全に手作業です。 次に、下記の作業を、マクロの自動記録を相対参照で行います。 上記のエクセルのデータを、1つめの8行のデータをコピーして(A1からA8)、C1に「行と列を入れ替え」を選択してC1からJ1に貼り付けます。 その後は、次のデータのまとまりのA10のセルに移ります。これをCtrl+a を押し続けることで、数百件か多いときは4000件ほどの並べ替えをしています。 「データがある間は、この処理を繰り返す。」 というマクロにしたいのですが、参考書等を見ながらチャレンジしてもうまくいきません。 わかる方、教えていただけますか。 以下が、マクロの自動記録でできた物です。データの個数は数百のこともあれば4000件のこともあります。 Sub 行列入れ替え8行() ' ' 行列入れ替え8行 Macro ' ' Keyboard Shortcut: Ctrl+a ' ActiveCell.Range("A1:A8").Select Selection.Copy ActiveCell.Offset(0, 2).Range("A1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True ActiveCell.Offset(9, -2).Range("A1").Select End Sub どうぞ、ご指導よろしくお願いいたします。

専門家に質問してみよう