マクロを作る時の関数IFについて

このQ&Aのポイント
  • クエリで落としたデータを一度テキストで保存してから必要な項目を残したりして最終的に顧客リストをマクロで作れるようにしたい。
  • マクロを記録中の作業で、ある数字によって回収方法を区分けする項目があります。
  • しかし数式を入れても、セルの数字が文字列でないからか、実行されません。テキスト保存したものからマクロを記録する場合、保存先が見つからない場合があります。
回答を見る
  • ベストアンサー

マクロを作る時の関数IFについて

クエリで落としたデータを一度テキストで保存してから必要な項目を残したりして最終的には顧客リストをマクロで作れるようにしたいのですが、マクロを記録中の作業で、ある数字によって回収方法を区分けする項目があります。 たとえば、1だったら集金の『集』、2だったら郵送の『郵』、3だったら振込みの『振』となるように関数のIFの数式を入れていきます。 しかし数式を入れても、セルの数字が文字列でないからか、実行されません。テキストで保存するときには文字列にして保存しているのですが 原因がわかりません。 別件ですが、テキスト保存したものからマクロを記録する場合、マクロを実行するときに保存先がみつかりませんというようなメッセージが出ることもありました。このようなときにもどうすれば実行できるのか わかりません。それぞれの対処法を教えてください。

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

  • ベストアンサー
  • ok2007
  • ベストアンサー率57% (1219/2120)
回答No.2

そういうことであれば、どこで不具合が生じているのか、原因となりそうなものをひとつずつ調べていくと良いでしょう。 私なら、次の順序で調べていくかと思います。 まず、マクロを実行したときに、手作業で入力した関数と同じ関数がセルへ入力されることを確かめます。同じ関数が入力されない(狙いどおりの関数が入力されない)ことが判明したら、次の調査へ進む前に、同じ関数が入力されるようにマクロコードを書き換えます。 同じ関数が入力されることが分かったら、手作業で関数を作成したときの実験データと、マクロ実行により入力されるデータとで、データ型が一致するかどうか(数値か文字列か)を調べます。(ここが不一致なのではないかと推定しています。) 不一致であれば、データ型をマクロ処理で変更するか、または関数をデータ型に合わせたものに変更します。 これでもなお「集」などが表示されなければ、次に・・・と調査を続けるところですが、このほかに考えられる原因がちょっと思いつかないので、申し訳ないのですがここまでにさせてください。 なお、データ型を調べる方法は、ご存知のことと思いますが、いろいろとあります。例えば、関数を使ってA1セルのデータ型を調べたいときは、「=TYPE(A1)」を例えばB1セルに入力します。B1セルに「1」と表示されたらA1セルの値は数値、「2」と表示されたら文字列となります。 また、「保存先がみつかりません」については、保存先の指定についてのマクロコードに誤りがあるのかもしれません。この点については、頂戴した情報からは、これ以上分かりません。お役に立てず申し訳ないところです。

kodana
質問者

お礼

回答ありがとうございます。 早速、アドバイスいただいたとおりに実行してみます。

その他の回答 (1)

  • ok2007
  • ベストアンサー率57% (1219/2120)
回答No.1

状況がよく分からないので、補足なさったほうがいいかもしれません。 まず、お使いなのはエクセルVBA(エクセルのマクロ)ということでよろしいでしょうか。 また、マクロは、「マクロの記録」で作成したものをお使いになっている、ということでしょうか。 そうだとすれば、「マクロの記録」をおこなっているときに、あるセルに手作業で関数を作成・入力したかと思うのですが、そのときは『集』などの文字が正しく表示されていたのでしょうか。(つまり、手作業で入力した関数自体には問題が生じないのでしょうか。) このような点を補足なさるほうがいいのでは、と思います。

kodana
質問者

補足

説明不足ですみません。 エクセルマクロを使っています。この関数の数式はマクロの記録中に 作成するもので、実行したときに数式が一番上の行のセルに入力される ようになります。マクロを実行後にそのセルの数式を残りの下のセルにコピーすることになります。 ですので指摘どおり、マクロの記録を行っているときに、手作業で関数の数式を入力しました。手作業で入力した関数自体は問題ないと思います。実際に元の数字を入れ直したときに実行できました。 落としたデータの元になる1や2の数字自体が何か問題だと思いますが、文字列とか標準とか、考えれらないでしょうか?

関連するQ&A

  • IF関数 こんな時には・・・。

    とっても簡単な質問です! Aが“白”の時Cは“150”    赤      200    青      350 ・・・と云ったように、A列の文字(数字ではないです)によって C列に数字が入るような数式を組み込みたいです。 A列が数字なら分かるのですが・・・。 簡単な質問で恐縮です!教えて下さい!!

  • VBAではなく、マクロでのフィルターのかけ方を教え

    accessのVBAではなく、マクロでのフィルターのかけ方を教えてください。 テーブル1には フィールド名:moji データ:テキスト型 文字列1 文字列2 ・ ・ ・ というデータがあります。 テーブル1を基にしたフォームには 画像のように、 コントロールソースにmojiを紐付けたテキストボックスを配置しました。 その際、マクロを実行して「文字列1」を抽出するフィルタの実行をしたいのですが マクロの作り方がわかりません。 マクロのアクションは「フィルタの実行」にしたのですが フィルタ名には何を入れればいいのでしょうか? とりあえずtestと入れました。 次に、Where条件式には [Forms]![フォーム1]![moji]="文字列1" といれました。 この時点ではエラーにならないのですが フォームを開いて、マクロ1を実行すると 「このウィンドウでは"ApplyFilter/フィルタの実行"アクションを実行できません。」 となってしまいます。 マクロの作り方を教えてください。

  • マクロで値を貼り付けたい

    Z列には数式が入っていて、マクロの実行ボタンをクリックするとその数式で出てきた答えをAA列に値で貼り付けるようにさせたいのですが、どのようにしたら良いのでしょうか? マクロの実行ボタンがそのシートを開くと常にシート上に表示されている状態にもしたいです。 マクロをわかっていないので、初心者でもわかりやすく教えていただけると嬉しいです。 よろしくお願い致します。

  • EmEditorでマクロ? 選択文字列を含む行の一括削除

    テキストエディタとしてEmEditorを使用しています。 「ある文字列」を全て削除する場合は置換を使えばできますが、 「ある文字列を含む行」を全て削除するにはどうすればよいのでしょうか。 マクロ機能を使用すればできるのではないかと思いましたが、 私は、マクロの記録/停止で実際に行った操作を記憶させる方法しか使ったことがなく、 この方法では上手くできませんでした。 文章中から任意の文字列を選択し、マクロの実行で文字列が含まれる行を一括削除 ということを行いたいです。 このようなマクロをご存じでしたら教えて頂けないでしょうか。 あるいは、これらのことは置換のみでもできるのでしょうか。

  • MS Wordのマクロに記録されない

    Word2010を使用しております。 マクロで、全角の数字のみを選択したいと考えています。 手動では、「高度な検索」画面で、ワイルドカードにチェックを入れ、「検索する文字列」に「[0-9]」と入力し、「検索する場所」に「メイン文書」を選択すると、全角の数字が全て選択されます。 しかし、これをマクロに記録し、実行しても、まったく選択されません。 この解決策か、マクロに記述するコードを教えてください。

  • エクセルのマクロの操作を記録するについて教えて下さい。

    エクセルのマクロの操作を記録するについて教えて下さい。 マクロ・VBAを勉強しはじめた超初心者です。 毎日、CSVの新しいデータを取得します。 その中で、列の並び変えや文字の太さ、ここは¥マークをつけたい など編集したい事があるのですが、 それを毎日していると時間がかかってしまうので自動化したいので マクロというものを知りました。 実際に、新しいCSVファイルを開いて、 マクロの記憶→上記の編集操作→マクロ記憶終了→保存 とすると、行った動作ではなく、 今現に表示されているCSVの文字データも記憶されてしまいますよね?? 行った動作(列の並び変えや書式変更、関数入力)という行動”だけ”を 自動化するにはどうしたら良いのでしょうか? 毎日取得するCSVデータは 列の項目は一緒ですが、その中で数字や住所が違うデータです。 分かりにくい文章で申し訳ありませんが よろしくお願い致します。

  • オートフィルのマクロを作りたい

    ある列に複数のデータがある場合、その一番上の右隣のセルに数式などを入力後、そのセルの右下の小さい四角をダブルクリックすると、左の列のデータある一番下までオートフィルされますよね。 これのマクロを組みたいのですが、単純に出来ません。 普通通りマクロの記録をすると、実際に入力されていたセル番号までのマクロとなってしまい、データを追加した場合意味が無くなります。 具体的に説明すると、 A1からA10までそれぞれデータがある場合、 B1に数式を入力後、オートフィルでB10までコピー。 これをマクロで組もうとすると、B10までのフィルが組まれてしまい、A11~A20までデータを追加後マクロを実行してもB10までのフィルしか実行されません。 「左の列のデータがあるところまで」というマクロは組めないのでしょうか。

  • エクセル if関数

    エクセル初心者なのでうまく説明できないのですが、以下のような条件で数式を入力したいのですが教えていただけないでしょうか。 例えばなのですが、A1のセルに入力されている文字列に”高橋”を含んでいたならば、C1のセルにB1のセルに入力されている数字×”1500”の計算結果を表示したい。 また同様に、A1に入力されている文字列に”伊藤”を含んでいるならば、C1のセルにB1のセルに入力されている数字×”1000”の計算結果を表示したい。 つまりひとつのセル”高橋”が入力されている場合と”伊藤”が入力されている場合の二つの条件をつけたいのですが、このようなことは可能でしょうか。 宜しくお願いいたします。

  • Excel97で、If文をなんとかしたい

    IF文でなんとかなりそうなんですが、IF文を使った事がなくて。 A列   B列   C列    任意の位置のセルD 数式  文字列   数式  文字列 数式  文字列 数式  文字列 こんな表で、Bの文字列の値と、Dのセルの値が一致した時、Aの数式の値(数字)をCの列に表示させ、BとDの文字が一致しない時は、”エラー”を表示させたいんですが、どういう風にすればいいのでしょうか? IF文を使えばいいのでしょうか? どういう風に、数式を立てればいいのかわかりません。 どなたか詳しい方、教えていただけませんか?

  • マクロとオートフィル

    オートフィルを使った「マクロの記録」の部分でつまずいてしまいました。 A列に名前、B列に数字が入っていて、2列にオートフィルタをかけている場合 B列の0の数字のみを非表示にしたかったので オートフィルのタブを使って「0」のチェックマークを外すという動作を「マクロの記録」で記録しました。 そこまではいいのですが、データの追加があったのでオートフィルタの範囲内に数字と名前をそれぞれの列に追加したあと上記のマクロを使ってみると、どうしても追加したデータと0が非表示になってしまいます。 これを避けるにはVBAで指示しないと行けないのでしょうか?

専門家に質問してみよう