エクセルのシートに貼りつけたbmpをjpegに

このQ&Aのポイント
  • エクセルのシートに貼りつけたbitmap形式の画像をjpeg形式に変換する方法について教えてください。
  • 手で1つずつ変換する方法もありますが、VBAを使用して一括で変換する方法を知りたいです。
  • 画像を貼り付けるセルの番地を取得し、同じ場所に同じ大きさで貼り付ける方法についても教えてください。
回答を見る
  • ベストアンサー

エクセルのシートに貼りつけたbmpをjpegに

手持ちの本(4冊)やインターネットで探せなかったので、教えてください。 エクセルのシートに15枚の画像(bitmap)が貼られており このままではファイルが重いので、同サイズのjpegに変換したいのですが・・・ 手でやると 画像選択→切り取り→貼り付けセルを選択→型式を選択して貼り付け→図(jpeg) 以下マクロの記録 ActiveSheet.Shapes.Range(Array("図 11")).Select Selection.Cut Range("H60").Select ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:= _ False End Sub となります。 これをVBAで数10ファイル連続で実行したいのですが、1つ問題があります。 画像はカウント後に配列で取り込み順次処理していきますが、 同じ場所に同じ大きさで貼りたいのですが、元画像を貼り付けているセルの番地の 取得をどうしたらよいか悩んでいます  コレ → Range("H60").Select 画像が張り付いているセルは複数で左上のセルを選択して貼り付けしたいのですが・・・ 貼り付けた画像(bitmap)は名前が自動的に振られているのでセルを指定して貼り付けると 元の位置に貼られない可能性があるので・・・ 貼り間違いなどで、同じ位置でも図の名前(図11等)が違ってしまっている場合 説明が下手で申し訳ありませんが、ご存知の方よろしくお願いいたします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

こんなところでいかがでしょうか。xl2010で(少しだけ)試しています。 ご参考まで。 Sub test() Dim shp As Shape Dim sh As Worksheet Dim shpAddress As String Set sh = ActiveSheet For Each shp In sh.Shapes If shp.Type = msoPicture Then shpAddress = shp.TopLeftCell.Address shp.Cut sh.Range(shpAddress).Activate sh.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False End If Next shp End Sub

tomomaki
質問者

お礼

お忙しいところ誠にすみません。 年1、2回くらいしかマクロをやらないので、 基本的なところも忘れているので、大変助かります。 早速、連続処理のマクロに移植して動かしてみたいと思います。 大変ありがとうございました。

関連するQ&A

  • Excel マクロでグラフの切取り貼り付け

    手動で行なった[マクロの記録]どうりに、マクロを実行してもうまくいきません。 マクロで、グラフの切り取り、貼り付け、形式を選択して貼り付け<図 (拡張メタファイル)>を実行すると、クリップボードに入らず、エラーとなる。 手動で行なうとOKなのですが、 [ツール]の[新しいマクロの記録]では、下記のとうり記録されていて、実行結果も正しいのですが、マクロで実行すると、クリップボードに入らず、エラーとなります。 ------------------------------- Range("E2:H4").Select Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" ActiveWindow.Visible = False ActiveWindow.WindowState = xlNormal ActiveWindow.WindowState = xlMaximized Range("C12").Select ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)", Link:=False, _ DisplayAsIcon:=False Range("J7").Select ------------------------- Office XP 2002 マクロ、素人です。 どうしてでしょうか?

  • Excelでセル上の画像を別のセルにコピーするには

    いつも楽しく勉強させていただいております。 つぎのような処理をしたいのですが、うまくいきません。 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 まず、このようなマクロを考えてみました。 Range("A1").CopyPicture Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これですと元の画像がA1のセルより小さい場合、周囲に余白がある形でコピーされてしまいます。 C1にコピーしたら余白はなしでC1の大きさいっぱいに画像を引き延ばしたい(あるいは縮小したい)のです。 そこで次のように変更してみました。 (上のプログラムと一番上の行のみが違います)。 ActiveSheet.Shapes("図 6").Copy Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これもうまくいきません。 A1にある元の"図 6"は動かしたくないのに、勝手にB1の位置に移動してしまいます。 というのは、"図 6"という画像をコピーすると、同じ名前で画像ができちゃうんですね。 コピー元とコピー先の両方の画像に対して位置や高さを設定することになるようです。 ということで、 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 これを実現させるにはどうしたらいいでしょう。

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • vbaで別のシートにセルで選択した列を反映させたい

    初めて質問させて頂きます。 vbaで別のシートにセルで選択した項目を反映させたいのですが出来ず困っております。 どなたかご教授頂けますでしょうか。 SR.xlsm ・B4からB100まで4桁の店舗コードがあります。 ・C4からC100までは住所。 ・D4からD100までは電話番号。 master.xlsx ・A1に店舗コードを貼り付けたい ・B2に住所を貼り付けたい ・D3に電話番号を貼り付けたい 作業内容としては以下をしたいのです。 例えばSR.xlsmのB50を選択してボタンをクリックすると master.xlsxが自動的に立ち上がり、 master.xlsxのA1 ⇒ B50を貼り付け master.xlsxのB2 ⇒ C50を貼り付け master.xlsxのD3 ⇒ D50を貼り付け 以下、自分なりにやってみたのですがどのセルを選択してボタンを押してもB4の列しか反映されません。 大変お手数をおかけいたしますがご教授願いますでしょうか。 宜しくお願い致します。 Sub click() ' ' click Macro ' ' Range("B4").Select Selection.Copy Workbooks.Open Filename:= _ "\\0000000\22\33\44\master.xlsx" ActiveSheet.Paste Windows("SR.xlsm").Activate Range("C4").Select Application.CutCopyMode = False Selection.Copy Windows("master.xlsx").Activate Range("E2").Select ActiveSheet.Paste Windows("SR.xlsm").Activate Range("D4").Select Application.CutCopyMode = False Selection.Copy Windows("master.xlsx").Activate Range("E4:H4").Select ActiveSheet.Paste Windows("SR.xlsm").Activate Range("E4").Select Application.CutCopyMode = False Selection.Copy Windows("master.xlsx").Activate Range("H2:H3").Select ActiveSheet.Paste End Sub

  • エクセルのマクロの手直し

    お世話になります。 エクセルのマクロに教えてください。 (1)シートの保護を解除 (2)E42~H42までを選択し[コピー] (3)E18をクリックして[形式名を選択して貼り付け](その中の値のみ) (4)E42~H42までを選択し[数式と値のクリア] (5)シートの保護 → OK ここで (3)のE18というセルの所を E列で、行番号は I42 のセルに7を足した数字 というようにしたい。(I42の値が15だったらE22という具合)ちなみに I42 のセルは条件により変化し0以上35以下の整数が入る。 以下は(1)から(5)の作業をマクロの新規作成で「マクロ」という名前で記録したものです。 どの部分を修正すればいいのか教えてください。 Sub マクロ() ' ' マクロ Macro ' マクロ記録日 : 2002/5/27 ユーザー名 : ' ' ActiveSheet.Unprotect Range("E42:H42").Select Selection.Copy ActiveWindow.ScrollRow = 10 Range("E18").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False ActiveWindow.SmallScroll Down:=6 Application.CutCopyMode = False Range("E42:H42").Select Selection.ClearContents Range("I37").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

  • エクセル・マクロ シートの非表示でマクロのエラー

    エクセル勉強中です。 マクロの記憶でSheet2の元データの図と記入できるセルをSheet1の有効セルにコピペするマクロを作りました。 複数の方が使う予定なので元データのSheet2を非表示にしたところマクロがエラーになりました。 どうしたらよいでしょうか? また貼り付けをする時、微妙に元データのシートがちらちらと移ります。 こちらも合わせてご指導いただけましたら助かります。   よろしお願いします。 Sub b1ab1() ' ' b1ab1 Macro ' ' Sheets("Sheet2").Select Range("AK48:AP56").Select Selection.Copy Sheets("ダクト制作単品図").Select ActiveSheet.Paste End Sub

  • Excel マクロ 任意のセルから実行したい

    こんにちは、Excel2003を使用しています。 ExcelでK55からE55までのセルの値を削除して(空白にして) それぞれに「---を引いた透明のダイアローグボックス」を コピーしていくマクロを作成したことがあります。 このときは開始するセルがK55と決まっていたのですが 今度は任意のセルから(たとえば選択したセルの右隣とか) 実行したいのですがどのようにマクロを作ればよいでしょうか ご存じの方お教えください。 なお参考に上記のマクロを記載します。 Range("E55:J55").Select Selection.ClearContents Range("H55").Select ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 672#, 729#, _ 81#, 13.5).Select Selection.Characters.Text = "" With Selection.Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.ShapeRange.Fill.Visible = msoFalse 'Selection.ShapeRange.Fill.Solid 'Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoFalse ActiveSheet.Shapes("Text Box 12").Select Selection.Characters.Text = "---" With Selection.Characters(Start:=1, Length:=3).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.HorizontalAlignment = xlCenter Range("K55").Select ActiveSheet.Shapes("Text Box 12").Select Selection.Copy Range("I55").Select ActiveSheet.Paste Range("H55").Select ActiveSheet.Paste Range("G55").Select ActiveSheet.Paste Range("F55").Select ActiveSheet.Paste Range("E55").Select ActiveSheet.Paste Range("E56").Select Selection.Copy Range("F56:J56").Select ActiveSheet.Paste Application.CutCopyMode = False Range("E56:J56").Select Selection.Copy Range("E57:E59").Select ActiveSheet.Paste Application.CutCopyMode = False Range("K59").Select End Sub

  • EXCEL(VBA)でシート保護がかかったシートにクリックボードから貼り付けしたい

    EXCEL2000のVBAで、クリップボードにコピーしたデータ(複数のセル範囲)を、シート保護がかかった別のシートにコピーする操作を行ないたいと考えています。 手順としては「1.クリップボードにコピー」→「2.シート保護解除」→「3.貼り付け」→「4.シート保護」なのですが、下記マクロを作成して試してみたところ、2.のシート保護解除を行なった時点でクリップボードが空になるようで、「実行時エラー'1004':RangeクラスのPasteSpecialメソッドが失敗しました。」と表示され貼り付けができません。 これについて何か回避策はないでしょうか? Range("A1:C3").Select Selection.Copy Sheets("貼り付け先シート").Select ActiveSheet.Unprotect Range("A1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 以上、よろしくお願いします。

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

    エクセルのマクロについて 領域の範囲選択→貼り付けの繰り返し処理をループで考えています。 領域の範囲選択し、貼り付け処理をマクロの自動記録で、出してみました。 Sub Macro1() Range("E6:G12").Select Selection.Copy Range("E17").Select ActiveSheet.Paste Application.CommandBars("Stop Recording").Visible = False End Sub この時に、「Range("E17").Select」の命令は「Cells」関数に置き換えられるのですが、「Range("E6:G12").Select」のように複数のセルの領域選択をする際に、「Cells」関数ではできないのでしょうか。 「Cells」関数を使えば、行列を数値にし、変数を使えば、LoopかFor命令で繰り返し処理ができるのですが、わかる方、解答ください。よろしくお願いします。

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

専門家に質問してみよう