• 締切済み

エクセルでのマクロ

素朴な質問なんですが… エクセルで写真を整理したいんです(一列に並べたり,写真のサイズを合わせたり…等) ウスウス聞いたことがあるんですが、このときコントロールキーとQを押すだけで,指定されたフォルダからの写真がエクセルで貼り付けることができるらしい…写真は予め設定したエクセルのセルのサイズに合わせて貼り付けられるんです。 このやり方知っている方はいらっしゃいますか?ぜひ教えてください。 もし違うやり方でもいいんですが、何枚かの写真をエクセルで貼り付けて、サイズを合わせて効率的に整理することができる方法を知っている方、ぜひその方法教えてください。 宜しくお願いします。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 > エクセルでのマクロ > 素朴な質問なんですが… マクロとわかっているなら、質問としては既に解決済みなのではないかと... > このときコントロールキーとQを押すだけで... マクロを Ctrl+Q のショートカットを割り当てているのですね。 過去に何回か作ったことがある内容なのでアップしますが、マクロの貼り付け方 はご自分でお調べ下さい。 WEB や書籍ですぐわかりますから。 貼り付ける場所は「標準モジュール」です。 1~複数枚の画像を一度に処理します。 ’以下ソースコード Option Explicit Sub 複数の画像を挿入() ' 1枚でも OK     Dim vFNames As Variant   Dim vFName  As Variant   Dim Pic   As Picture   Dim sOffset As String      ActiveCell.Select   ' ファイル名問い合わせ   vFNames = Application.GetOpenFilename( _        FileFilter:="Image(*.jpg;*.gif;*.bmp;*.png),*.jpg;*.gif;*.bmp;*.png", _        Title:="図の挿入(複数選択可)", _        MultiSelect:=True)   If Not IsArray(vFNames) Then Exit Sub   ' 2枚以上なら貼り付け間隔問い合わせ   If UBound(vFNames) > 1 Then     Do       sOffset = InputBox("1~20の整数を入力します", _                 "貼り付け間隔の指定", Default:=2)       If sOffset = "" Then         Exit Sub       ElseIf Val(sOffset) >= 1 And Val(sOffset) <= 20 Then         Exit Do       End If     Loop   Else     sOffset = "0"   End If   ' ファイル名をソート   Call ComSort(vFNames, True, True, vbTextCompare)   ' マクロ実行中の画面描写を停止し、画像挿入開始   Application.ScreenUpdating = False   For Each vFName In vFNames     ' 順番に画像を挿入     Set Pic = ActiveSheet.Pictures.Insert(vFName)     ' 一つ右側のセルにファイル名を挿入     ActiveCell.Offset(0, 1).Value = Dir$(vFName)     ' 画像プロパティ変更-----------------------------------------     With Pic       .Top = ActiveCell.Top    ' 垂直位置       .Left = ActiveCell.Left   ' 水平位置       .Placement = xlMove     ' 移動するがサイズ変更しない       .PrintObject = True     ' 印刷する     End With     With Pic.ShapeRange       .LockAspectRatio = msoTrue  ' 縦横比維持       .Height = ActiveCell.MergeArea.Height ' セルの高さに合わせる     End With     '-----------------------------------------------------------     ' 次の貼り付け先のセルをアクティブにする     ActiveCell.Offset(sOffset).Activate   Next   ' 終了   Set Pic = Nothing   Application.ScreenUpdating = True   If UBound(vFNames) > 1 Then     MsgBox CStr(UBound(vFNames)) & "枚の画像を挿入しました", _         vbInformation, "正常終了したみたい(・∀・)"   End If   Erase vFNames End Sub ' // コムソート(ファイル名の入った配列をソートするのに使います) Public Sub ComSort( _   ByRef Src As Variant, _   Optional ByVal CompStr As Boolean = False, _   Optional ByVal SortAsc As Boolean = True, _   Optional ByVal Compare As VbCompareMethod = vbTextCompare)      Dim lLow As Long, lUpr As Long, lGap As Long, i As Long   Dim vTmp As Variant   Dim bSwt As Boolean, bFlg As Boolean      lLow = LBound(Src): lUpr = UBound(Src)   lGap = lUpr - lLow   bSwt = True      Do While lGap > 1 Or bSwt     lGap = Int(lGap / 1.3)     Select Case lGap       Case Is = 9, 10: lGap = 11       Case Is < 1:   lGap = 1     End Select     bSwt = False     For i = lLow To lUpr - lGap       If SortAsc Then         bFlg = IIf(CompStr, _             (StrComp(Src(i), Src(i + lGap), Compare) > 0), _             (Src(i) > Src(i + lGap)))       Else         bFlg = IIf(CompStr, _             (StrComp(Src(i), Src(i + lGap), Compare) < 0), _             (Src(i) < Src(i + lGap)))       End If       If bFlg Then         vTmp = Src(i)         Src(i) = Src(i + lGap)         Src(i + lGap) = vTmp         bSwt = True       End If     Next   Loop End Sub

関連するQ&A