EXCEL97のVBAで作成したマクロを他のPCで使用するとマクロが正常に動きません。VBAを作成したPCと使用したPCで特に環境の違いといえば、ジャストシステム系のアプリケーション(一太郎)がインストールされているかいないか位の差です。開発側には一太郎が存在しています。
Visual Basic Editorで参照できるファイルが存在していない旨のメッセージ?らしきものがでたので[ツール]-[参照設定]を確認したところJUSTファイルのJslib32の参照ができていないようなのです。開発者(といっても素人)は、特に難しい設定をしたわけでもないのですが・・・?
このように、VBAを使うとき開発環境と使用環境の違いで動かなくなることってあるのでしょうか?
このような場合、どのような対策をとれば、使用できるようになるのでしょうか?(使用PCに一太郎を入れれば良いのでしょうが、他の方法は無いのでしょうか?)
ただし、勝手に一太郎の責任にしているのかも知れません。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

 一太郎は過去にATOKとAccessの相性の悪さでひどい目にあって以来使用していません(^^;;


 参照設定でJslib32をはずしてみてはどうでしょうか?
何のライブラリかわかりませんがそのdll?に依存する機能をVBA側で使用していない限り必要ないと思うのですが。
    • good
    • 0
この回答へのお礼

質問している者が素人な為、用を得ない質問でごめんなさい。
参照設定でJslib32をはずしたら動きました。ありがとうございました。

しかし、VB Editorのプロパティウインド等のフォントが正常に表示されなくなってしまいました。今後改良等の予定はないので、いいかなぁ~とも思いますが、この状態でも使用に対して問題は無いでしょうか?

お礼日時:2001/02/01 16:53

もし一太郎で出力するとか特別な指定がないようでしたら、このまま「Jslib32」を参照する部分の行の先頭に「'」をつけて(つまり「Jslib32」をさんしょうしないようにして)、このファイルをほかのPCに移しても大丈夫だと思います。


でも、なぜ「Jslib32」を参照するマクロになるんだろう?と云う疑問が生じるのですが…
最善は作成者に良く確認することだと思います。
VBAはそれほど敷居が高くないので、これを機にkazhさんもお勉強なさってみてはどうでしょうか?
    • good
    • 0

申し訳ありませんが、もう一度、このエクセルのファイルが何のためのモノか、差し障りのない範囲で仰っていただけますか?


「Jslib32」は一太郎とかジャストシステム製品のためのライブラリの格納フォルダです。これを使うようなExcelファイルであるならば、これを動かすPCにも一太郎やジャストシステムアプリケーションがあって、そのためのものではないのですか?
それと文字化けは、ほかのマクロを表示した時にも発生しますか?

この回答への補足

ありがとうございます。
>このエクセルのファイルが何のためのモノか
エクセルのワークシート上に、家畜のエサの成分が入っていまして、どのくらい食べさせれば、栄養的に十分かを計算させるものです。セルにいちいち数値を入力するのが大変なため、入力フォームを作成し入力をするマクロを組みました。・・・
というわけで、ジャストシステムアプリは使っていないと思うのですが?

>それと文字化けは、ほかのマクロを表示した時にも発生しますか?
Jslib32を切ってしまったら、このファイルのVB Editorのプロパティウインドの文字が化けてしまいました。
他の、ファイルを開き確認したところ化けていないようです。

補足日時:2001/02/01 18:36
    • good
    • 0

仰っていることは、要するにマクロの付いたExcelのファイルが開けない(そのファイルのマクロが動かない)と云うことですか?


何をするためのファイルか分かりかねますが、特定のファイルを参照するのであれば、そのファイルがないと動かないでしょう。代替処理(その参照ファイルがなければ、別のところへ飛ぶ)か何かやらないと…
これはVBAだけのことではないと思いますが…
もっと具体的に書いていただけますか。
    • good
    • 0
この回答へのお礼

質問している者が、素人なので用を得なくてすみません。
外部のファイルを参照しているのにそのファイルが無くて、動かないのではないと思われます。jslib32のなかのDLLを参照している用なのですが・・・

参照設定を解除(チェックをはずしたら)動きました。ただ、このまま使って問題ないのかが不安です。さらにVB Editorのフォントが文字化けしたようになってしまいました。

もしわかれば、教えて下さい。 お願いします。

お礼日時:2001/02/01 17:01

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBA で指定した範囲に入力があるかどうか?

こんばんは!!
EXCEL VBAを使い出して、初日からつまずいてます・・・。
みなさん、アドバイスよろしくお願いします!!

で、早速、質問なんですけど、
指定したセル範囲のいずれかに入力があるか調べたいんですけど、それができるプロパティとかってあるんでしょうか?
地道にセル毎にチェックするしかないいんでしょうか??

たとえば、範囲をA1:H1として、その範囲内のセルに何か入力があったらTrueが返ってくるとか・・・。

もし、知ってる方がいらっしゃたら教えてください!!
よろしくお願いします!!!!!

Aベストアンサー

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてしまうんですが、『WorksheetFunction.』と打てば、候補の関数名が表示されると思います。

下記の fnc入力チェック は入力有無を返すユーザー定義関数です。
書き方の例です。分かりやすくなった?この例は引数に"A1:H1"をセットしています。任意の範囲にするには Selection.Address に変えます。

Sub 入力チェック()
  Dim 入力有無フラグ As Boolean        '入力有無の答え

  入力有無フラグ = fnc入力チェック("A1:H1")  'モジュール内でA1~H1を指定(固定)

  MsgBox 入力有無フラグ            '帰ってきた答えをメッセージボックスで確認
End Sub

'入力有無を返すユーザー定義関数
Function fnc入力チェック(checkAddress As String)
  If WorksheetFunction.CountA(Range(checkAddress)) > 0 Then
    fnc入力チェック = True
  Else
    fnc入力チェック = False
  End If
End Function

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてし...続きを読む

QRange("A1")⇔cells(1,1)の変換。

EXCELのマクロについて質問します。
Range("A1")⇒(1,1)
cells(1,1)⇒("A1")
に一発変換する方法を教えて下さい。
時間があるかた宜しくお願いします。

Aベストアンサー

こんなのでよろしいでしょうか?
range("A1") → Range("A1").Row & "," & Range("A1").Column
cells(1,1) → Cells(1, 1).Address(False, False)
()や""は付けていません

QEXCELのマクロが他のパソコンで動かない

マクロ初心者なのですが、どなたか教えてください。

自作のツールバーのボタンを押したら
そのボタンに対応するCSV形式のファイルから
データをひっぱってきて、自動でグラフ化するという
マクロを作りました。

私のパソコンでは正常に動くのですが
他の人のパソコンでそのファイルを開くと、
「このブックにあるVBAプロジェクト、
 ActiveXコントロール、およびその他のプログラミン
 グ関連の機能は失われています」
というメッセージボックスが出てきて
マクロが使えないんです。

私には全く理由が分からないので、どんな手がかりでも
いいので教えて下さい(;_;)よろしくお願いします。

Aベストアンサー

こちらのケースが該当するのではないでしょうか。

VBA が有効でないときに使用できない Excel の機能
http://support.microsoft.com/default.aspx?scid=kb;ja;282847

原因としては
1)Excel 2002 をインストールするときに、VBA のインストール設定を [インストールしない] にしている
2)システム ポリシー [Disable VBA for Office Applications] を使用している
などが考えられるようです。

1)についてはこちら。
Office アプリケーションのマクロウイルス対策(「VBA をインストールしない」の項)
http://www.microsoft.com/japan/office/previous/xp/techinfo/macrovirus/against.asp
Visual Basic for Applications をインストールする手順
http://support.microsoft.com/default.aspx?scid=kb;ja;281952


2)についてはこちらが参考になるかもしれません。
Microsoft Office XP のセキュリティ設定(「Disable VBA for Office applications」の項)
http://www.microsoft.com/japan/technet/security/guidance/secmod56.mspx

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;282847

こちらのケースが該当するのではないでしょうか。

VBA が有効でないときに使用できない Excel の機能
http://support.microsoft.com/default.aspx?scid=kb;ja;282847

原因としては
1)Excel 2002 をインストールするときに、VBA のインストール設定を [インストールしない] にしている
2)システム ポリシー [Disable VBA for Office Applications] を使用している
などが考えられるようです。

1)についてはこちら。
Office アプリケーションのマクロウイルス対策(「VBA をインストールしない」...続きを読む

QDirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

いろいろ調べましたが不明な点があり、質問します。

WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。
このサイズを合計できるコマンドはありませんか?
DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。
具体的には
C:\xxx\配下に50個程度のファイルがあります。
その50個の合計サイズを知りたいです。
xxxフォルダの親フォルダにはアクセス不可です。

ずーっと悩んでいます。よろしくお願いします。

なお、OSはWindowsNTか2000で使用予定です。

Aベストアンサー

カレントドライブ、カレントフォルダを
C:\xxx\
にした状態で、

dir /s /a-d

/sパラメータででサブディレクトリすべてを検索
/a-dパラメータでディレクトリ以外のファイル(つまり属性に関係なくすべてのファイル

これを実行すると最後にファイルの個数とファイルサイズの合計を表示します。

もし、隠し属性のファイルは合計しないのであれば、

dir /s

だけで良いと思われます。

QエクセルVBAのフォームを最前面にする方法を教えてください。

エクセルVBAなのですが、UserForm1を最前面に表示して、
他のどのウインドウをアクティブにしても消えない状態にしたいのですが、
どのようなコードを書けばできるでしょうか。
VB.NETで表すとMe.TopMost = Trueとなると思うのですが、
エクセルVBAだとそのような書き方はないようです。

もうしわけございませんがご教示頂きたく、お願いいたします。m(__)m

Aベストアンサー

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST As Long = -1
Private Const SWP_NOSIZE As Long = &H1&
Private Const SWP_NOMOVE As Long = &H2&


Private Sub UserForm_Activate()
Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOS...続きを読む

QVBAで別エクセルファイルから指定エクセルファイルにシートをコピー

Office2003のエクセルでVBAを勉強しております。

そこで、VBAで別エクセルファイルからあるシートを指定エクセルファイルへ丸まるコピーしたい場合にはどのようにすればよいのでしょうか?

Aベストアンサー

Sheets("A").Copy Before:=Workbooks("Book1").Sheets(1)


>Office2003のエクセルでVBAを勉強しております。

方法が解らなければ、記録マクロを確認するのが一番です。
動作が理解出来たら、コードの最適化を行ってください。

QVBAによるセル内の画像の位置調整

Excel2007のVBAからShell関数で外部実行プログラムを起動します。
外部実行プログラムは画像データをクリップボードへデータを出力後、自動で終了します。
Shell関数とWin32APIを使用して外部プログラムを実行し、プログラムが終了するまで待つように処理して、
クリップボードから指定する複数の結合したセルへ画像を貼り付ける事は出来たのですが、
画像がセルの左上を基準に貼り付けられます。
この画像を、セルの中央に位置調整したいのですが可能なのでしょうか?
また画像の回転(1度単位)は可能でしょうか?

'指定セルへクリップボードの内容を貼り付け
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("H53")

画像ファイルなどを読み込む訳ではないため、画像データ自体に名前がありません。
手動で位置調整は可能ですが、自動化出来ないかと色々調べ試してみたのですが、思う様に実現できません。
セルの結合は5行、列は結合していません。

どなたか御存知でしたら回答下さい。

Excel2007のVBAからShell関数で外部実行プログラムを起動します。
外部実行プログラムは画像データをクリップボードへデータを出力後、自動で終了します。
Shell関数とWin32APIを使用して外部プログラムを実行し、プログラムが終了するまで待つように処理して、
クリップボードから指定する複数の結合したセルへ画像を貼り付ける事は出来たのですが、
画像がセルの左上を基準に貼り付けられます。
この画像を、セルの中央に位置調整したいのですが可能なのでしょうか?
また画像の回転(1度単位)は可能で...続きを読む

Aベストアンサー

またまた登場,onlyromです。

百聞は一見に如かず、ということで新しいブックのSheet1で以下を実行してください。


 H53~H57 を結合して(画像より大分大きめに幅、高さを広げておく)

任意の場所に画像を貼り付け、又は 挿入

その後、下記コードをコピペして実行


'---------------------------------------
Sub test()
 With Selection
  .Top = (Range("H58").Top - Range("H53").Top - .Height) / 2 + Range("H53").Top
  .Left = (Range("I53").Left - Range("H53").Left - .Width) / 2 + Range("H53").Left
 End With
End Sub
'----------------------------------------

どうですか?
ど真ん中に移動したと思いますが。
 

またまた登場,onlyromです。

百聞は一見に如かず、ということで新しいブックのSheet1で以下を実行してください。


 H53~H57 を結合して(画像より大分大きめに幅、高さを広げておく)

任意の場所に画像を貼り付け、又は 挿入

その後、下記コードをコピペして実行


'---------------------------------------
Sub test()
 With Selection
  .Top = (Range("H58").Top - Range("H53").Top - .Height) / 2 + Range("H53").Top
  .Left = (Range("I53").Left - Range("H53").Left...続きを読む

QEXCELのVBAでRange("A1:C4")を変数にする方法を教え

EXCELのVBAでRange("A1:C4")を変数にする方法を教えて下さい。

Sub Sample1()
Range("A1:C4").Borders.LineStyle = True
End Sub

上のマクロの"A1:C4"を変数にして成立させるにはどのように設定すればいいのでしょうか?
以下の方法ではエラーになってしまうので、宜しくお願いします。

Sub Sample1()

HENSU = Chr(34) & "A1" & ":" & "C4" & Chr(34)
Range(HENSU).Borders.LineStyle = True
End Sub

Aベストアンサー

こんなので好いですか?
下記をモジュールシートへ貼り付けて試行してみて下さい。

Sub Sample2()
Dim HENSU As String '←変数の宣言をします。

HENSU = Chr(34) & "A1" & ":" & "C4" & Chr(34) ' ""A1:C4"" を返します。←NG
HENSU = "A1" & ":" & "C4" ' "A1:C4" を返します。←OK
HENSU = "A1:C4" ' "A1:C4" を返します。←OK
Range(HENSU).Borders.LineStyle = True ' HENSUの範囲に罫線を引きます。
End Sub

Q任意フォルダから画像をすべてエクセルの指定マスに貼り付けをしたい

ネットでいろいろ検索し、試してみましたが自分の思うような仕上がりにならず困っています。

実施したい内容としては、マクロで
①エクセルシートのA2,B2,C2,D2,A4,B4,C4,D4 …A24,B24,C24,D24セルに画像を挿入
②マクロを開始するとフォルダを選ぶ画面が現れる
③フォルダを選択すると、①にフォルダ内の画像がすべて貼り付けられる
④画像は、セルの大きさに合わせて自動調整される
というものです。

1枚ずつを選んでセルに自動調整で貼り付けるということは真似事でできましたが、希望の内容をできるようにしようとすると、かなり難易度が高くお手上げ状態です。
このプログラムをどのように改修すれば可能になるかお教えください。

Sub 図11()

Dim strFilter As String
Dim Filenames As Variant
Dim PIC As Picture

' 「ファイルを開く」ダイアログでファイル名を取得
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
If Not IsArray(Filenames) Then Exit Sub

' ファイル名をソート
Call BubbleSort_Str(Filenames, True, vbTextCompare)

' 貼り付け開始セルを選択
Range("B6").Select

' マクロ実行中の画面描写を停止
Application.ScreenUpdating = False
' 順番に画像を挿入
For i = LBound(Filenames) To UBound(Filenames)
Set PIC = ActiveSheet.Pictures.Insert(Filenames(i))

'-------------------------------------------------------------
' 画像の各種プロパティ変更
'-------------------------------------------------------------
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

' 次の貼り付け先を選択(アクティブセルにする)[例:5個下のセル]
ActiveCell.Offset(5).Select

Set PIC = Nothing
Next i

' 終了
Application.ScreenUpdating = True

End Sub

よろしくおねがいします。
※マクロはほぼ初心者です。大体がネットからコピペをして使っている程度のレベルです。

ネットでいろいろ検索し、試してみましたが自分の思うような仕上がりにならず困っています。

実施したい内容としては、マクロで
①エクセルシートのA2,B2,C2,D2,A4,B4,C4,D4 …A24,B24,C24,D24セルに画像を挿入
②マクロを開始するとフォルダを選ぶ画面が現れる
③フォルダを選択すると、①にフォルダ内の画像がすべて貼り付けられる
④画像は、セルの大きさに合わせて自動調整される
というものです。

1枚ずつを選んでセルに自動調整で貼り付けるということは真似事でできましたが、希望の内容をできるよう...続きを読む

Aベストアンサー

>①エクセルシートのA2,B2,C2,D2,A4,B4,C4,D4 …A24,B24,C24,D24セルに画像を挿入
>②マクロを開始するとフォルダを選ぶ画面が現れる
>③フォルダを選択すると、①にフォルダ内の画像がすべて貼り付けられる
>④画像は、セルの大きさに合わせて自動調整される

①は、A2で始まり、横に4進み、下に2進むという数列を設けています。
②は、ご存知のShell のBrowseForFolderを利用しましたが、他にもあるでしょう。
問題は③かな。一応、 ''安全のため(上限を設定) という箇所を設けましたが、不要なら、コメント・アウトしてください。また、DoEvents も入れておきました。
④は、何も手を付けていません。
コメント・アウトした部分で不要なら削除してください。

'//
Sub 図11R()
 'No. 9024507
 Dim strFilter As String
 Dim Filenames() As Variant
 Dim fName As Variant, ext As String
 Dim PIC As Picture
 Dim k As Long, m As Long
 Dim i As Long, j As Long
 Dim cnt As Long
 Dim FirstRng As Range
 Dim r As Range
 Dim Sel_Folder As Object, Sel_Path As String
 cnt = 0 'カウントの初期値
 '貼り付け最初のセル
 Set FirstRng = Range("A2")
 
  Set Sel_Folder = CreateObject("Shell.Application"). _
    BrowseForFolder(0, "フォルダを選択してください", 5)

  If Not Sel_Folder Is Nothing Then
    Sel_Path = Sel_Folder.Self.Path
  Else
   Exit Sub
  End If
 
 ' 「ファイルを開く」ダイアログでファイル名を取得
 ChDir Sel_Path
' strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
' Filenames = Application.GetOpenFilename( _
' FileFilter:=strFilter, _
' Title:="図の挿入(複数選択可)", _
' MultiSelect:=True)
 fName = Dir("*.*", vbNormal)
 Do While fName <> ""
  If fName <> "." And fName <> ".." Then
   ext = Mid(fName, InStrRev(fName, ".") + 1)
   If InStr(1, "jpg,jpeg,gif,bmp,png", ext, 1) > 0 And Not fName Like "#*" Then
    cnt = cnt + 1
    DoEvents
    ReDim Preserve Filenames(1 To cnt)
    Filenames(cnt) = fName
    ''安全のため(上限を設定)
    If cnt > 100 Then Exit Do
   End If
  End If
  fName = Dir()
 Loop
 If cnt = 0 Then Exit Sub
 
 ' ファイル名をソート
 Call BubbleSort_Str(Filenames, True, vbTextCompare)
 
 '' 貼り付け開始セルを選択
 'Range("B6").Select
 
 ' マクロ実行中の画面描写を停止
 Application.ScreenUpdating = False
 ' 順番に画像を挿入
 k = LBound(Filenames)
 m = UBound(Filenames)
 
 For j = 1 To Int(m / 4) + Abs(m Mod 4 > 0)
  For i = 1 To 4
   Set PIC = ActiveSheet.Pictures.Insert(Filenames(k))
   Set r = FirstRng.Cells(1 + (j - 1) * 2, i)
   
   '-------------------------------------------------------------
   ' 画像の各種プロパティ変更
   '-------------------------------------------------------------
   With PIC
    .Top = r.Top ' 位置:アクティブセルの上側に重ねる
    .Left = r.Left ' 位置:アクティブセルの左側に重ねる
    .Placement = xlMove ' 移動するがサイズ変更しない
    .PrintObject = True ' 印刷する
   End With
   With PIC.ShapeRange
    .LockAspectRatio = msoTrue ' 縦横比維持
    ' 画像の高さをアクティブセルにあわせる
    ' 結合セルの場合でも対応
    .Height = r.MergeArea.Height
   End With
   
   ' 次の貼り付け先を選択(アクティブセルにする)[例:5個下のセル]
   ' ActiveCell.Offset(5).Select
   
   Set PIC = Nothing
   k = k + 1
   If k >= m Then Exit For
  Next i
 Next j
 Application.ScreenUpdating = True
 ChDir ThisWorkbook.Path
End Sub

>①エクセルシートのA2,B2,C2,D2,A4,B4,C4,D4 …A24,B24,C24,D24セルに画像を挿入
>②マクロを開始するとフォルダを選ぶ画面が現れる
>③フォルダを選択すると、①にフォルダ内の画像がすべて貼り付けられる
>④画像は、セルの大きさに合わせて自動調整される

①は、A2で始まり、横に4進み、下に2進むという数列を設けています。
②は、ご存知のShell のBrowseForFolderを利用しましたが、他にもあるでしょう。
問題は③かな。一応、 ''安全のため(上限を設定) という箇所を設けましたが、不要なら、コメント・アウトし...続きを読む


人気Q&Aランキング