- ベストアンサー
Excelシートにjpg画像を素早く貼付けたい
表題のことは、「挿入」-「図」-「ファイルから」で出来ることは百も承知なれど、もっと簡単に、シート上にドラッグするなどの方法はないものでしょうか。いちいちjpgの位置を参照指定するのがカッタルイんですゎ。D&Dしようとすると「+」マークが出て、いかにも出来そうな気配がするんですが、ダメなんですよねぇ。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
ListViewControlでも良いかもしれませんが、 簡易的にWebBrowserコントロールではどうでしょう。 WorkSheet上に置いても使えますが、 mitarashiさんのようにUserFormに配置するほうが柔軟に対応できますね。 Personal.xlsにでもUserForm1を追加して [ツールボックス]右クリック[その他のコントロール]で Microsoft Web Browser にチェックを入れてWebBrowserコントロールをUserFormに配置します。 Formモジュールには Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, _ URL As Variant, _ Flags As Variant, _ TargetFrameName As Variant, _ PostData As Variant, _ Headers As Variant, _ Cancel As Boolean) Cancel = True ActiveSheet.Pictures.Insert URL End Sub これくらいです。 _NavigateComplete2イベントを使ってもいいかもしれませんが。 使う時は UserForm1.Show vbModeless でUserFormを表示させておいてエクスプローラからドラッグ&ドロップするだけです。
その他の回答 (6)
- end-u
- ベストアンサー率79% (496/625)
ドラッグ&ドロップに拘らなければ エクスプローラで選択しておいて Sub test() Dim w As Object Dim x As String On Error Resume Next For Each w In CreateObject("Shell.Application").Windows If InStr(TypeName(w.Document), "ShellFolder") > 1 Then x = w.Document.FocusedItem.Path Select Case UCase(Right(x, 3)) Case "JPG" ', "PNG" MsgBox x 'ActiveSheet.Pictures.Insert x End Select Exit For End If Next Set w = Nothing End Sub これでも可ですか。#winXP/xl2003でのみテスト。 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200603/06030011.txt
お礼
早速のご回答ありがとうございます。 なるほど、いろいろなことができるもんですなぁ。 デスクトップ上の画像にも対応できたらよいな、と思いました。 それと、複数のエクスプローラーを立ち上げている場合なんか、注意深く操作をしないと予期せぬ画像を取り込むこともあり、その点、ANo.6で紹介いただいたUserForm方式が確実性で勝っていると思いました。
- mitarashi
- ベストアンサー率59% (574/965)
Drag&Dropを受け付けるListViewControlはxl2010でも使えるのかなと思ってやってみました。 操作の手順は、 ・貼り付けたいセルを選択して、右クリックメニューから拡張コマンド(ここではDD picture)を実行 ・UserFormが表示されるので、エクスプローラやVix等からファイルをUserFormにドラッグ&ドロップ(複数選択対応) ・アクティブセルに画像を貼り付け(複数選択した場合は、前の画像から一行おいて連続貼り付け) というものです。 骨格だけですので、エラー処理がありません。対応していないファイルをD&Dしたりするとエラーになりますがあしからず。 ☆UserForm1モジュール 'ListViewコントロールを設置して、UserFormをお好きな寸法に設定しておく Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) Dim i As Long For i = 1 To Data.Files.Count addPictures (Data.Files(i)) Next i ActiveCell.Select End Sub Private Sub UserForm_Initialize() Me.Caption = "D&D Picture" '必要によりアクティブセルのそばにUserFormを表示するプロシージャを呼ぶ(下記はWebで見つけた一例) ' http://homepage2.nifty.com/kmado/kvba.htm 'kFormPosCell Me With Me.ListView1 .OLEDropMode = ccOLEDropManual .Top = 0 .Left = 0 .Width = Me.InsideWidth .Height = Me.InsideHeight End With End Sub Private Sub addPictures(myFileName As String) Dim myShape As Shape Dim shapeArea As Range Set myShape = ActiveSheet.Shapes.AddPicture( _ Filename:=myFileName, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Selection.Left, _ Top:=Selection.Top, _ Width:=0, _ Height:=0) With myShape .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue End With Set shapeArea = ActiveSheet.Range(myShape.TopLeftCell, myShape.BottomRightCell) shapeArea.Offset(shapeArea.Rows.Count + 1, 0).Activate End Sub ☆標準モジュール Sub pastePicture() UserForm1.Show vbModeless End Sub ☆Thisworkbookモジュール(アドインにする場合) 'セルを選択して右クリックメニューから起動 Private Sub Workbook_AddinInstall() Dim NewB As Variant Set NewB = Application.CommandBars("Cell").Controls.Add() With NewB .Caption = "DD picture" '最初D&Dにしたが&は表示されなかった .OnAction = "pastePicture" .BeginGroup = True End With End Sub Private Sub Workbook_AddinUninstall() On Error Resume Next Application.CommandBars("Cell").Controls("DD picture").Delete On Error GoTo 0 End Sub 参考 1.UserFormでListViewControlを使う http://officetanaka.net/excel/vba/listview/index.htm 2.アドインの作成 保存する時に、ファイルの種類を「エクセルアドイン (*.xlam)」にします。(2010の場合) 3.アドインの登録 http://www.h3.dion.ne.jp/~sakatsu/Excel2007_Addin_Inst.htm デフォルトではアドイン形式で保存すると C:\Users\ユーザーアカウント名\AppData\Roaming\Microsoft\Addins に保存されますが、上記URLによると C:\Program Files\Microsoft Office\Office14\Library に置く方が良さそうです。
お礼
早速のご回答ありがとうございます。 ちょっと私のレベルでは対応不能なようです。VBA勉強の材料にさせていただきます。 ちなみに、私の案は下記のとおりです。 (1)エクスプローラー上で対象ファイルを右クリックし、フルパスをクリップボードにゲット(D&D方式のフリーソフトでもよいのですが)。 (2)挿入したいセルをクリックした後、あらかじめ(例えば)「Alt+g」に登録しておいたPersonal.xls内の下記マクロをキー操作で実行する(ショートカットキー)。 Sub 画像挿入() Dim buf As String, CB As New DataObject With CB .GetFromClipboard buf = .GetText End With ActiveSheet.Pictures.Insert(buf).Select End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
VBAなら近いことは出来る。 (1)一番やりやすいのは、フォルダは1定(同じフォルダに画像ファイルを集めている)として、画像ファイル名(文字列)を列のセルに集める。そうすればVBAの実行で 縦何列、横何列、間隔どれだけ、サイズなど指定して、整列させた形で(算術演算だ)配置できるよ。 (2)またはそのフォルダは、シートに挿入するものだけにして、余分なファイルを除いておけば、 指定フォルダの中のファイル名をとらえるコードは、簡単で、WEB上に出回っているから、それで1つずつ順に捉えて そのファイル名で(1)を行うことは出来る。 ファイル拡張子に制限があると思うが。 ーー ただし(1)でフォルダの画像ファイルをエクスプローラーで表示して置いて、エクセルシートへD&Dなどして、シートのセルにファイル名を文字列の形でセットする方法は、わからない。 ーー エクセルは画像を主に扱うソフトでは無いので、余りあれこれ要求してもお門違い。 やりたいなら別のソフトを探すか、プログラムの域に入らざるを得ない。 ちょこちょこと質問sぢてで済むものではない。
お礼
早速のご回答ありがとうございます。 なにか複雑な作業を前提にされているようですが、私の目的とする作業は、エクスプローラーで目に止まった画像1枚をExcelシートの選択セル部分に貼付けるだけのことなんです。取りあえず、「ただ取り込むだけ」、です。但し手数少なく。ANo3お礼欄に記述した方法によれば、エクスプローラー画面に対象画像があったとして、(1)D&D、(2)貼付けたいExcelシート上のセルをクリック、(3)ショートカットキーでマクロ実行、という流れになります。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
案1 応用で、Wordオブジェクトを挿入しておくのもありかもしれませんね。 案2 1. エクスプローラーでアドレスをコピー 2. [図をファイルから挿入]コマンドボタンをクリック 3. ファイル名 の欄に[Ctrl]+[V]貼り付け [Enter] で その場所までは簡単に行けます。
お礼
早速のご回答ありがとうございます。 案2をヒントに、適当なフリーソフトを利用し、D&Dにて対象画像のフルパスをクリップボードに取得し、VBAでDataObjectを使って選択セル位置に貼付けることで、曲がりなりにも目的は達成できるのではないかと。
>シート上にドラッグ とお考えなら、どのみち画像ファイルのパスまではWindowsエクスプローラなどでたどってるわけですよね? だったら、アクセスキーを使ってAltを押下しながらI,P,Fと連打したあとで画像ファイルのパスまでをたどるのと最終的なトータル時間は変わらないように思えるのですが。
お礼
早速のご回答ありがとうございます。 >どのみち画像ファイルのパスまではWindowsエクスプローラなどでたどってるわけですよね? 「どのみち」ではなく、もう「Windowsエクスプローラなどでたどって」しまってから、「じゃー、この画像でも挿入してみっか」ってケースが多いんですゎ。
- hayasi456
- ベストアンサー率40% (2402/5878)
Office2000と2003を使っています。 word経由はいかがでしょう。 wordはドラックで出来ますね。 wordからExcelへはドラックで移動できます。 コピー&ペースト(貼り付け)も可能です。 (画像データが重いと時間が掛かります。) 私はツールバーに「図をファイルから挿入」のコマンドボタンを追加しています。 ちょっと楽です。 http://www.eurus.dti.ne.jp/yoneyama/Excel/mous_jyo/jyo-5.html#toolbar
お礼
早速のご回答ありがとうございます。 >word経由はいかがでしょう。 >wordはドラックで出来ますね。 確かに!。 >wordからExcelへはドラックで移動できます。 >コピー&ペースト(貼り付け)も可能です。 ドラッグ移動はできませんでしたがコピペは出来ました。 ただ、私はWordを使うと気が狂いそうになるんです。Excelは大好きなんですが・・・。 VBAなら出来るんでしょうかねぇ。
お礼
早速のご回答ありがとうございます。 仰せの方法にて実現できました。 最後にUserFormが自動的に消えるコードを追加すれば、拙案(但しD&Dでフルパスが取得出来るソフトのアイコンを常にデスクトップに表示させておく必要がありますが)と比較し、処理の手数は全く同じですね。