エクセルVBEのマクロ修正方法 | セルを画像として保存
- エクセルVBEのマクロを使ってセルを画像として保存する作業を行っていますが、ファイル名の自動付与を修正したいです。
- 現在のマクロでは、連番でimage00001.bmp、image00002.bmpというファイル名が付与されますが、画像変換したセルの右隣のセルの文字列をファイル名として使用したいです。
- 具体的には、A1のセルを画像にした場合、右隣のB1の文字列が01-001aであれば、ファイル名をimage01-001a.bmpにしたいです。修正方法を教えてください。
- ベストアンサー
エクセルVBEのマクロを修正したいのです。
「エクセルのセルを一個ずつ別々の画像として書き出し保存する」 という作業を、下の質問回答に記載のマクロを参考にしながら 行っています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=3087644 複数選択したセルを別々の画像として保存することが一度ででき、 とても助かっているのですが、ただ、出来上がるbmpファイルの ファイル名が自動的につけられてしまうところを少し修正できれば、 と考えています。 上に記載の方法ではできあがった画像に、自動的に連番で image00001.bmp image00002.bmp というようなファイル名が付与されるのですが、 この00001とか00002という部分に 画像変換したセルの右隣のセルの文字列を入れるようにしたいのです。 例えば、 A1のセルを画像にした場合、B1に01-001aという文字列があれば、 画像のファイル名を image01-001a.bmp に A5のセルを画像にした場合、B5に01-005aという文字列があれば、 画像のファイル名を image01-005a.bmp に するにはどうすればよいのでしょうか? お手数ですが http://oshiete1.goo.ne.jp/kotaeru.php3?q=3087644 をご確認いただき、どこをどのように直せばよいのか ご教示願えますでしょうか。 (禁止事項に触れると思いますので参考にしたマクロを ここにそっくりそのままコピペすることは避けました。) おそらく ' // BMPファイルを書き出す Call SavePicture(p, sImgDir & "\image" & Format$(lImgCnt, "00000") & ".bmp") lImgCnt = lImgCnt + 1 Set p = Nothing という箇所を変更するのだとはおもうのですが。 VBAはあまりよくわかっていないので 少し丁寧に説明していただけると助かります。 よろしくおねがいします。
- yousiss
- お礼率94% (52/55)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
選択されているセルを基点に行・列の差を指定して参照する offset が使えるかも? テストできる環境にないので、以下の位置に例示の1行を追加してみてください。 ダイアログで「画像変換したセルの右隣のセルの文字列」が表示されるなら、取得は成功。 Call SavePicture(p, sImgDir & "\image" & Format$(lImgCnt, "00000") & r.offset(0,1).text &".bmp") に変更して実行してください。 If Not p Is Nothing Then ' // BMPファイルを書き出す msgbox r.offset(0,1).text ''''<--この位置にこの行を追加 Call SavePicture(p, sImgDir & "\image" & Format$(lImgCnt, "00000") & ".bmp") lImgCnt = lImgCnt + 1
関連するQ&A
- エクセルのマクロ
あるエクセルのファイルにLIST(A列に呼びだすエクセルファイル名、B列からD列に呼びだしたエクセルに貼り付ける文字列があり、それが100行程度ある)があり、そのLIST A列に書かれているエクセルファイルを開き、その開いたエクセルファイルのある特定のセルにB列からD列にあるセルをそれぞれに貼りつける作業を繰り返すようなマクロはできないでしょうか? [流れ] LISTに書いてあるエクセルファイルを呼び出す→文字列を貼りつける→保存(できれば名前を変えて保存(その場合は、LISTのE列に名称を記載)→閉じる→次のLISTのエクセルファイルを開く→それをLISTの最後の行まで終わるまで繰り返す。 よろしくお願いします。
- 締切済み
- Visual Basic
- エクセルマクロによるハイパーリンクの方法
はじめて投稿します。 エクセルマクロを始めたばかりですが、よろしくお願いします。 Fileフォルダ内にマクロ.xlsとdataフォルダがあり、 dataフォルダ内には複数のPDFファイルがあります。 マクロ.xlsのセルA1~A10に適当な英数字の文字列(例えばA123,B243,C072…など)が書かれていて dataフォルダ内にはセルA1~A10に書かれている文字列に少し文字が追加された名前のPDFファイル (例えばセルの文字列が"A123"なら"A123(OK).pdf")があります。 これをマクロを使ってA1~A10の文字列にハイパーリンクさせて、 セルに書かれている文字列をクリックして開きたいのですがどうすればよいでしょうか? A1~A10に書かれている文字列を変数cellnameに代入し、 PDFファイルをcellnameにワイルドカードを使って変数pdfnameに代入できずにつまずいています…。 どなたかご解答の程宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- セルにある文字列をファイル名にして、2ヶ所別のフォルダに保存するマクロ
あるセル(A10)にある文字列をファイル名にして、2ヶ所のフォルダに 保存するマクロを教えてください。 下記質問で番号(下記アドレス参照)を採番した後、その番号をファイル 名として、2ヶ所のフォルダに保存したいのです。 http://oshiete1.goo.ne.jp/qa3195270.html マクロ初心者ですが、そのような事がマクロで出来ますか? 出来るならば、その方法を教えてください。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCELのマクロでテキストを読み込む方法
EXCELのマクロを使って、テキストファイルから、ある文字列を検索し、コピーしEXCELのシートのセルにペーストするマクロの書き方をご存知の方は、ご教示願います。 例えば、テキストファイル中の「dog」という文字列を検索して、EXCELの決まったセル(A、1)にコピペするというマクロです。 よろしくお願い申し上げます。
- ベストアンサー
- Visual Basic
- VBEでこんなことができますか。
エクセルのVBA(VBE)で、以下のことが可能でしょうか。 シート上のA列に並んだn個のセル内に文字列があります。 このn個の文字列をファイル名として、特定のフォルダ内に、 中身のない(0バイト)のn個のファイルを作成したいと思います。 こんなことができるvbのコードの作り方がありましたら、教えてください。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- Excel の =TEXT()関数の怪?
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2004201 配下の[No.2 EL-SUR]さんの回答中の =TEXT(A1,"00-00-00") あるいは =TEXT(A1,"0000-00-00") の部分は、私にとって“目から鱗”的なものでした。つまり、セル A1 が数値あるいは文字列の 20060121 であるとき、当該関数は 2006-01-21 なる文字列を返して来ることが。 でも当該関数を =TEXT(A1,"0000/00/00") にする(「-」を「/」に変更)とエラー #VALUE! になるのは何故なのでしょう?2006/01/21 となることを期待していたのですが… 気になって眠れないのです(^_^)
- ベストアンサー
- オフィス系ソフト
- エクセルの数式で、COUNTIF(A1:A100,">""")
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2224824 の関連質問です。 表A1:A100にある、各セル内の数式で求められた計算結果が文字列の場合、その数を調べるには、 =COUNTIF(A1:A100,">""") で、各セルの計算式の答えが "" 以外の文字列の数を返してくれるようです。(数値や空白セルはカウントされません。) 非常に便利なのですが、ちょっと腑に落ちないのは、 >"" って、""より大きいということですよね? しかし文字列は数字とちがい大小はないのではないでしょうか? もう一点疑問です。 ためしに、=COUNTIF(A1:A100,">=""") としてみました。 今度は、 >="" ですから、""も含むということになるはずですよね? ところが答えが "" となるものをカウントしません。 不思議でたまりません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
早速のご回答ありがとうございます。 00000という連番は必要なかったので & Format$(lImgCnt, "00000") だけ削除しましたが、他は教えていただいたように変更してうまくいきました。 「offsetを使うんだろうな~」といううっすら予想はあったのですが、どうやって書いたらいいのか分からなかったのでたすかりました。 ありがとうございました。