• 締切済み

vbaのコード 画像処理 1ヶ月勉強しても分かりません

いつも皆様にはお世話になっております。 ここ一ヶ月画像処理のvbaだけを調べているのですが分かりませんので 今回ご質問させていただきます。 画像jpgファイルをwebよりエクセルに取り込み加工したいのですが、どうしても詰めの加工ができません。 やりたい事を申しますと マクロボタンを作動後sheet”キャッシュ”の sell B27・B28・B29 (ハイパーリンク済,他の処理でアドレスの一部が変わります)のアドレスより jpg画像をそれぞれsheet”画像情報”sell D90・I90・M90にサイズを縮小(30%程度に)して貼付。 同時にsheet”見積”・”注文”・”内容”の同 sell にコピー 画像が存在しない場合msgbox"No Photo" 2度目、3度目の処理がありますので、前回画像を削除 マクロ実行中はウインドの固定 という感じです。 下記に1画像の正常処理分のみ貼付いたしました。 残り処理は画像の伸縮と他sheetへのコピーです。 図書館やネットでここ1ヶ月勉強しましたが画像処理のデータが少なく 又、私の頭の悪さもあり画像処理に関しては完成しません。 半年前よりコツコツ進めてきているエクセルファイルですので なんとか完成させたいと思いご質問させていただきました。 ここ何日間は全く進歩がありません。 もう、降参です。 本当にささいな事でも結構ですのでどうぞ宜しくお願い致します。 初心者ですががんばります。 Sub GAZOU() ' ' GAZOU Macro ' マクロ記録日 : 2007/7/9 ユーザー名 : ' Application.ScreenUpdating = False Dim 画像 As Shape For Each 画像 In ActiveSheet.Shapes If 画像.Type = 13 Then 画像.Delete Next On Error GoTo Err1 Range("d90").Select Sheets("キャッシュ").Select Range("i27").Select Sheets("画像情報").Pictures.Insert Cells(27, 2) Sheets("画像情報").Select Exit Sub Err1: MsgBox "No Photo" Application.ScreenUpdating = True End Sub

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >画像jpgファイルをwebよりエクセルに取り込み加工したいのですが、 >どうしても詰めの加工ができません。 私には、申し訳ないのですが、Web より取り込むのでしたら、コードがまったく違うような気がするのですが。 以下の#2 に私の作った、インポート用のコードがありますが、参考になりませんでしょうか?サイズの調整は、貼り付けの際か後に、Range の範囲に対して、Top, Width, Height, Left を指定すればよいのですが、% の縮小は、試してみないとなんとも言えません。 http://oshiete1.goo.ne.jp/kotaeru.php3?qid=2304054

ha-texi-
質問者

お礼

ありがとうございました。 解読が終わりました。 縮小に関しては問題クリアできました。

関連するQ&A

  • エクセル★画像選択のVBAコード

    いつも参考にさせて頂いております。 リンク先の画像貼付まではうまく行くのですが 貼り付けた画像のセレクト方法を教えてください。 VBAコード Range("a1").Select Sheets("sheet2").Select Sheets("sheet1").Pictures.Insert Cells(2, 2) Sheets("sheet1").select 質問内容 シート1のA1に貼り付けられた画像を選択したいのですが・・・? ActiveSheet.Shapes("Picture 10").Select               ↑ このコードでは画像のナンバーが変わるとエラーとなってしまいます。 どうぞ宜しくお願いいたします。

  • VBA コマンドボタンにおけるコードについて

    下記のようなコードを作成しました。 これを簡略化するにはどうすれば良いのでしょうか? よろしくお願いします。 Private Sub CommandButton1_Click() Sheets("sheet2").Select Select Case UserForm1.ComboBox1.Text Case Is = Sheets("sheet2").Range("A1").Value Sheets("sheet2").Range("B1").Value = "X" Case Is = Sheets("sheet2").Range("A2").Value Sheets("sheet2").Range("B2").Value = "X" Case Is = Sheets("sheet2").Range("A3").Value Sheets("sheet2").Range("B3").Value = "X" Case Is = Sheets("sheet2").Range("A4").Value Sheets("sheet2").Range("B4").Value = "X" Case Is = Sheets("sheet2").Range("A5").Value Sheets("sheet2").Range("B5").Value = "X" ・ ・ ・ End Select End Sub

  • EXCELのVBAを実行したら止まってしまいます。。。

    お世話になります。 下記のマクロを作ってみたのですが、シート「読込」にコピーされたところまで確認できるのですが、その後マウスが砂時計になって、動かなくなってしまいます。オートフィルタを解除する部分を削って実行してみましたが、同じところで止まりますので、貼付のところに問題があるようなのですが、何がいけないのでしょうか? また、なんかもっとスマートなプログラムになりませんでしょうか? 宜しくお願いします。 Sub test() Sheets("Normal").Select Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:=Sheets("読込").Range("B2"), _ Operator:=xlAnd, Criteria2:=Sheets("読込").Range("C2") Selection.SpecialCells(xlVisible).Copy Sheets("読込").Select Range("C3").Select ActiveSheet.Paste Sheets("Normal").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Selection.AutoFilter End Sub

  • エクセルVBA・画像を張り付けるコードについて

    次のような目的で以下のコードを作成しました。 1.オリンパス社のカメディアマスターというソフトで複数の画像を表示 2.希望の画像を選択してコピー 3.B1に希望の画像を一定サイズで張り付ける sub 画像貼付 () Range("B1").Select ActiveSheet.Paste Selection ShapeRange.Height 200 Selection ShapeRange.Width 200 End Sub 今回、ご教授したいのは次のとおりです。 上記で2つ目以降の画像を別のシートに貼り付ける際、誤ってカメディアソフト上で画像を選択しないでマクロを実行すると、前回の画像が貼り付いてしまいます。 これを何らかの方法で防ぎたいのです。 よろしくお願いします。

  • エクセルVBAで、シートに条件を付けて処理させたい

    エクセルVBAで 『コピー用』シートと『あああ』シートと『いいい』シートと『ううう』シートがあり、 『あああ』シートと『いいい』シートと『ううう』シートの全ての情報を 『コピー用』シートにコピーしてまとめるようにしました。 マクロを処理するには、 『あああ』シートと『いいい』シートと『ううう』シートに設置したボタンを押すと処理する。 ここまでは実現することができました。 私がやりたいことは、 シートの内容を変更したのに、そのボタンを押し忘れてしまい、 そのまま『コピー用』シートを使用してしまうことを避けるために、 【「あああ」シートか「いいい」シートか「ううう」シートが変更されている】 かつ 【マクロを処理させるボタンを押していない】 この場合に、「コピー用」シートをアクティブにしたときに マクロ処理をするかしないかを選択させるダイアログを表示させる。 シートが変更されていない または マクロを処理させるボタンを押した後にシートを変更していない この場合は、「コピー用」シートをアクティブにしたときに マクロ処理をするかしないかを選択させるダイアログは表示させない。 といった処理を可能にしたいです。 詳しくは↓のサンプルページを参考にして下さい。 http://blog-imgs-17.fc2.com/s/k/s/sksfiosjdijf34/sampledesu.htm ボタンを押して全シートをコピーする処理のコードは↓のような感じで作りました。 ダイアログの処理は調べて作ってみましたが、ちゃんと動作しませんでした。 Microsoft Excel Objectsのsheet1(sheet2とsheet3とsheet4は空白)に Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim keizoku As Integer keizoku = MsgBox("内容が変更されていますが、「あああ」シートか「いいい」シートか「ううう」シートのマクロ処理開始のボタンをまだ押していないためマクロ処理がされていません。処理しますか?", vbYesNo) Select Case keizoku Case vbYes Application.EnableEvents = False Call macro1 Application.EnableEvents = True Case vbNo myMsg = "" Case Else myMsg = "" End Select End Sub を入れ、 次に、標準モジュールのModule1に Sub macro1() Worksheets("あああ").Range("B2:AD51").Copy _ Destination:=Worksheets("コピー用").Range("B1:AD50") Worksheets("いいい").Range("B2:AD51").Copy _ Destination:=Worksheets("コピー用").Range("B51:AD100") Worksheets("ううう").Range("B2:AD101").Copy _ Destination:=Worksheets("コピー用").Range("B101:AD200") Application.ScreenUpdating = False For RowCount = 400 To 1 Step -1 If Application.WorksheetFunction.CountA(Worksheets("コピー用").Rows(RowCount)) = 0 Then Worksheets("コピー用").Rows(RowCount).Delete End If Next Application.ScreenUpdating = True Application.OnKey "a" End Sub を入れました。 詳しくは↓のサンプルページを参考にして下さい。 http://blog-imgs-17.fc2.com/s/k/s/sksfiosjdijf34/sampledesu.htm アドバイスをお願いいたします。

  • エクセルVBAの質問 開いているもう一つのブックのシート名をすべて取得する方法

    おはようございます。 現在マクロを実行しているブックのシート名を下のようなコードで取得していますが、これを 開いているもうひとつのブックのシート名を マクロ実行しているシート“しーと1”のJ3セル以降に並べる というように変更したいのですが、下のコードを少し変更して 対応できるでしょうか?教えていただけたら助かります。 Sub シート名() Dim i As Integer Dim mySheetCnt As Integer Dim mySheetNam As String Application.ScreenUpdating = False Columns("J:J").Select Selection.ClearContents Range("J2").Select ActiveCell.FormulaR1C1 = "項目名" mySheetCnt = ThisWorkbook.Sheets.Count For i = 2 To mySheetCnt mySheetNam = Sheets(i).Name Sheets("しーと1").Cells(i, 10) = mySheetNam Next i Application.ScreenUpdating = True MsgBox "シート名更新しました。" End Sub

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • VBAのWorkbook_BeforeSaveイベントについての疑問

    エクセル2000です。 前にも似たような質問をしたのですが理解ができていません。 ThisWorkbookモジュールに以下の記述をし、終了時保存する場合にはSheet2を表に出すようにしました。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("Sheet1").Range("A65536").End(xlUp).Offset(1).Value = Time() Sheets("Sheet2").Select MsgBox "保存します。" & ActiveSheet.Name Sheets("Sheet1").Range("B65536").End(xlUp).Offset(1).Value = Time() End Sub これで×を押して手動で終了すればそのとおりに働きます。ActiveSheet.Nameも当然Sheet2になります。 ところが、標準モジュールの下記の終了マクロ Sub 終了() ThisWorkbook.Close End Sub で終了しようとすると、A列セルにTime()は記録され、どういうわけかSheet2がSelectされず、MsgBox "保存します。" のメッセージが出て、B列セルにTime()が記録され、保存されます。 ActiveSheet.NameもSheet2ではありません。 つまり、Sheets("Sheet2").Select の部分だけが完全にスキップされてしまうのです。 どうしてでしょうか?

  • excel2000VBAで用紙の上半分部分のみ連続印刷する

    excel2000VBAでマクロを作成しています。 10人について数項目については同じですが、人によって請求項目が違い、請求項目がない人については、非表示にしたいです。 また前回の請求を参考に見ながら書き換え必要部分のみ入力作成します。 請求書の印刷は、A4用紙5枚を使います。 各シートの、上半分(1/2)の部分が請求書になっていますので各シートの上半分部分を1枚目から10枚目まで連続で印刷します。 下記のコードは、シート2枚印刷すると、その横の列に 順に印刷するようにマクロ作成しました。つまり縦に2枚横5枚づつ計10枚印刷できます。 これでなんら印刷の不具合は生じません。 しかしながら、見るからに幼稚なコードで情けないです。これをマクロらしく、もしくは新しい別の方法をご教示ねがいたいのです。よろしくお願いします。 Sub 請求書一括印刷() Application.ScreenUpdating = False Sheets("A").Select Range("B2:AB32").Select Selection.Copy Sheets("請求印刷 (2)").Select Range("B1").Select ActiveSheet.Paste Sheets("A").Select Application.CutCopyMode = False Range("B2").Select Sheets("B").Select Range("B2:AB32").Select Selection.Copy Sheets("請求印刷 (2)").Select Range("B34").Select ActiveSheet.Paste Sheets("B").Select Application.CutCopyMode = False Range("B2").Select Sheets("C").Select Range("B2:AB32").Select Selection.Copy Sheets("請求印刷 (2)").Select Range("AD1").Select ActiveSheet.Paste Sheets("C").Select Application.CutCopyMode = False Range("B2").Select   以下つづく Sheets("hyousi").Select End Sub

  • シートのマクロについて

    sheet1 をアクティブすると下記のマクロが実行されるようにしたのですが なかなかうまくいきません。 どなたか教えて下さい。 Sub クリア() Dim ans As Integer ans = MsgBox("全てクリアをしてもいいですか?", _ vbYesNoCancel + vbInformation, "クリア実行") Select Case ans Case vbYes Sheets("sheet1").Select Range("B4:W43,Z4:Z43,AA4:AA43").Select Selection.ClearContents Range("B4").Select Sheets("sheet1").Select Case vbNo MsgBox "NO" Case Else MsgBox "中止します" End Select End Sub

専門家に質問してみよう