Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


128 / 3841 ページ ←次へ | 前へ→

【79921】Re:シート内にセル参照があるか調べる方法
質問  ペーターパン E-MAIL  - 18/5/23(水) 22:20 -

引用なし
パスワード
   ▼マナ さん:
>▼ペーターパン さん:
>
>>他のブックやシートの参照はありません。
>
>禁止しなくてもよいかという質問だったのですが…
>実際の運用上、ありえないので、禁止しなくてもよいということでしょうか。

運用上あり得ないので禁止しなくてよいです。
・ツリー全体表示

【79920】Re:シート内にセル参照があるか調べる方法
発言  マナ  - 18/5/23(水) 22:18 -

引用なし
パスワード
   ▼ペーターパン さん:

>他のブックやシートの参照はありません。

禁止しなくてもよいかという質問だったのですが…
実際の運用上、ありえないので、禁止しなくてもよいということでしょうか。
・ツリー全体表示

【79919】Re:シート内にセル参照があるか調べる方法
質問  ペーターパン E-MAIL  - 18/5/23(水) 22:06 -

引用なし
パスワード
   ▼マナ さん:
>▼ペーターパン さん:
>
>>■OK
>> =1500-100*2
>> =500+200-100
>>■NG
>> =A1-100+200
>> =A21-G21+100
>>
>
>他のブックやシートのセル参照は考慮する必要がありますか

他のブックやシートの参照はありません。
・ツリー全体表示

【79918】Re:シート内にセル参照があるか調べる方法
発言  マナ  - 18/5/23(水) 22:03 -

引用なし
パスワード
   ▼ペーターパン さん:

>■OK
> =1500-100*2
> =500+200-100
>■NG
> =A1-100+200
> =A21-G21+100
>

他のブックやシートのセル参照は考慮する必要がありますか
・ツリー全体表示

【79917】Re:シート内にセル参照があるか調べる方法
質問  ペーターパン E-MAIL  - 18/5/23(水) 21:15 -

引用なし
パスワード
   ▼マナ さん:
>▼ペーターパン さん:
>
>>使うのはエクセルに堪能な人だけではありません。
>
>=A1
>
>は、だめなのですよね。
>それより簡単な(間違えるリスクの少ない)
>四則演算の例を教えてください。
>
>>それが四則演算のようにそのセル単独でおさまるのであれば問題ありません。

■OK
 =1500-100*2
 =500+200-100
■NG
 =A1-100+200
 =A21-G21+100

以上でわかるでしょうか?
・ツリー全体表示

【79916】Re:シート内にセル参照があるか調べる方法
発言  マナ  - 18/5/23(水) 20:09 -

引用なし
パスワード
   ▼ペーターパン さん:

>使うのはエクセルに堪能な人だけではありません。

=A1

は、だめなのですよね。
それより簡単な(間違えるリスクの少ない)
四則演算の例を教えてください。

>それが四則演算のようにそのセル単独でおさまるのであれば問題ありません。
・ツリー全体表示

【79915】Re:シート内にセル参照があるか調べる方法
質問  ペーターパン E-MAIL  - 18/5/23(水) 19:42 -

引用なし
パスワード
   ▼マナ さん:
>▼ペーターパン さん:
>
>>数式入力はOKです。
>>セル参照のみを禁止したいです。
>
>質問の仕方を変えます。
>1)禁止してはいけないものは何でしょうか。
>2)数式を全面禁止にしてはいけないのでしょうか。
>3)以下のような数式はOKにしなければいけませんか。
>  =IF(A1="","",A1)

1)セル参照のみです
2)数式は全面オーケーです
    正確には数式ではなく、四則演算です。
3)意図がわかりませんが、セル参照はNGです

マクロを記述したエクセルを使うのはエクセルに堪能な人だけではありません。
数式を使う場合は、それが四則演算のようにそのセル単独でおさまるのであれば問題ありません。
しかし、セル参照はそれを別の人が新たに使用する、修正する場合に問題を起こします。
従ってセル参照は禁止したいのです。
セル参照がある場合にこれをメッセージで注意喚起する方法が適切です。
私の説明が拙いばかりにご迷惑をおかけしてすみません。
日本語が下手なので、、、
ご容赦下さい。
・ツリー全体表示

【79914】Re:シート内にセル参照があるか調べる方法
発言  マナ  - 18/5/23(水) 19:12 -

引用なし
パスワード
   ▼ペーターパン さん:

>数式入力はOKです。
>セル参照のみを禁止したいです。

質問の仕方を変えます。
1)禁止してはいけないものは何でしょうか。
2)数式を全面禁止にしてはいけないのでしょうか。
3)以下のような数式はOKにしなければいけませんか。
  =IF(A1="","",A1)
・ツリー全体表示

【79913】Re:VBA配列への格納方法
回答  よろずや  - 18/5/23(水) 16:12 -

引用なし
パスワード
   ▼mk さん:
>Array1 = Sheet1.Range("A1", "A4").Value
Array1 = Worksheets("Sheet1の実際の名前").Range("A1", "A4").Value


>Setステートメントを用いて記述するにはどうしたら良いでしょうか?
Setは使いません。
・ツリー全体表示

【79912】Re:VBA配列への格納方法
質問  mk  - 18/5/23(水) 14:14 -

引用なし
パスワード
   ▼よろずや さん:
>Option Explicit
>Sub test()
>Dim Array1 As Variant
>  Array1 = Sheet1.Range("A1", "A4").Value
>  Sheet2.Range("A1", "A4").Value = Array1
>End Sub
>
>他の列については、意味不明ですので省略。

回答ありがとうございます。

下記部分についてなのですが
Array1 = Sheet1.Range("A1", "A4").Value
実際の表で実施しようとすると
[実行時エラー424:オブジェクトが必要です]と表示されるため
Set Array1 = Sheet1.Range("A1", "A4")
と記載しています。

Setステートメントを用いて記述するにはどうしたら良いでしょうか?
・ツリー全体表示

【79911】Re:VBA配列への格納方法
回答  よろずや  - 18/5/23(水) 12:44 -

引用なし
パスワード
   Option Explicit
Sub test()
Dim Array1 As Variant
  Array1 = Sheet1.Range("A1", "A4").Value
  Sheet2.Range("A1", "A4").Value = Array1
End Sub

他の列については、意味不明ですので省略。
・ツリー全体表示

【79910】Re:VBA配列への格納方法
回答  mk  - 18/5/23(水) 10:05 -

引用なし
パスワード
   ▼よろずや さん:
>▼mk さん:
>>[A1]に該当する項目が多々ある為、処理時間を考えて
>>配列を使用したいのですが良い方法はないでしょうか?

>2つのシート上の配列は、同じ形なのでしょうか?
>そのセル範囲を明確にしてください。

Sheet1とSheet2で配列は違います。

やりたいことのイメージは下記の様なことです

Sheet1 イメージ
      A        B         C   
1    =100+50+B1    1        
2    =200+60+B2    2        
3    =300+70+B3    3            
4    =400+80+B4    4            

Sheet2 イメージ
      A        B     C    
1    =100+50+B1  1,000       1    
2    =200+60+B2  2,000      2    
3    =300+70+B3  3,000     3    
4    =400+80+B4  4,000     4    

A列に表示されて欲しい値  実際に表示される値
151            1150 
262            2260
373            3370
484            4480

Sheet2のA列にはShet1のA列で計算された値のみを表示させたい
しかし数式がコピーされてしまうのでSheet2で計算された値が表示されてしまいます。
・ツリー全体表示

【79909】Re:画像付データベース
発言  γ  - 18/5/23(水) 7:15 -

引用なし
パスワード
   >リンク先を別フォルダにある画像にすればいいでしょうか?
「図」を「挿入」する動作をしてみてください。
メニューに、そういう挿入の仕方があると思います。

> SelectionChangeプロシージャを使うということは、
> マウスをクリックした時のイベントということですね。

違います。
マウスに限らず、セルの選択状態を変えたときに
実行されるイベントプロシージャのことです。
イベントプロシージャーという言葉で、
VBAのテキスト(書籍等)を調べてみてください。

ところで、どのような作業に使うデータベースか知りませんが、
全体をいちどきに表示させる必要があるのですか?
検索した結果だけをユーザーフォームに表示させるとか言った方法も
あるのでないかという気がします。

>マウスを移動しただけで画像を表示したいです。
所望されていることはわかりましたが、あいにく私は知りません。
他の方からの回答をお待ち下さい。
・ツリー全体表示

【79908】Re:画像付データベース
質問  そば  - 18/5/22(火) 22:03 -

引用なし
パスワード
   ご回答ありがとうございます!

文章が拙くてごめんなさい。
開くのが遅いというのは、
画像が出てくるのが遅いということではなく、
excelデータが立ち上がるのが遅いという意味です。

サイズは50MBほどで、立ち上がるのに5分かかるというのは遅すぎると思い、
原因はコメントに画像を張り付けているからでは、と思った次第です。


"画像を直接、リンク貼り付けして"
とのことですが、
リンク先を別フォルダにある画像にすればいいでしょうか?


SelectionChangeプロシージャを使うということは、
マウスをクリックした時のイベントということですね。

できるなら、コメントのように、
マウスを移動しただけで画像を表示したいです。

マウスを動かしただけでTargetを調べる方法はないでしょうか?
・・・と書いていたら、mousemove イベントなるものがあるみたいですね。
これ使えば何とかなるかな?
・ツリー全体表示

【79907】Re:指定のフォルダから画像を取込むマクロ
発言  γ  - 18/5/22(火) 20:43 -

引用なし
パスワード
   > fileNameには一体、どういったパスが入ることに なるでしょうか?
結果だけ知りたいのであれば、ステップ実行して、
myPath.Items.Item.Path が何になるのか、
fileName = Dir(myPath.Items.Item.Path + "\")
に何が入るのかは、ご自分で確認できるはずです。
特にこうしたところで質問するまでもないですね。

言ってみれば、これは1つのイディオムみたいなものなので、
そのまま使って便利ですね、で普通は終わりですが、
さらに詳しく知りたいということなら、
Shellオブジェクトをご自分で調べて下さい。
言うまでもなくこれはVBAの外にあるものです。

"Shell.Application" でネット検索して調べてください。

最初にヒットする牟田口さんのサイトの記事
ht tp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shellfol.htm
を参考にして下さい。

1つずつ階層を降りていけば、
myPath.Items.Item.Path
の意味が分かると思います。

通常のようにプロパティでつながっていれば、
ローカルウインドウで下に降りていけますが、
この場合は、オブジェクトを返すメソッドで階層を降りていっているので、
ローカルウインドウでは降りていけません。
したがって、ネットでヘルプ・解説記事をよむのが一番です。

この構文の意味がわかっても、それを色々な形で応用するという場面は
さほどないように思いますが、好奇心を満たすことも必要でしょう。

# その構文の意味を知るよりも、インデントを正確につける作法を身につけた方が
# 数倍意味があることだと思います。いかがですか?
# また、文字列の連結は + ではなく、きちんと & を使った方がよいです。
・ツリー全体表示

【79906】Re:VBA配列への格納方法
発言  よろずや  - 18/5/22(火) 19:29 -

引用なし
パスワード
   ▼mk さん:
>[A1]に該当する項目が多々ある為、処理時間を考えて
>配列を使用したいのですが良い方法はないでしょうか?
2つのシート上の配列は、同じ形なのでしょうか?
そのセル範囲を明確にしてください。
・ツリー全体表示

【79905】Re:VBA配列への格納方法
質問  mk  - 18/5/22(火) 17:53 -

引用なし
パスワード
   よろすや さん

回答ありがとうございます。

[A1]に該当する項目が多々ある為、処理時間を考えて
配列を使用したいのですが良い方法はないでしょうか?
・ツリー全体表示

【79904】Re:VBA配列への格納方法
回答  よろずや  - 18/5/22(火) 17:12 -

引用なし
パスワード
   ▼mk さん:

>Set Sh1Range = Sh1.Range("A1")
>
>Sh1Range.Copy Sh2.Range("B1")

Sh2.Range("B1").Value = Sh1.Range("A1").Value
・ツリー全体表示

【79903】VBA配列への格納方法
質問  mk  - 18/5/22(火) 13:50 -

引用なし
パスワード
   セルに表示された値のみを配列へ格納するにはどうしたら良いのでしょうか?

Sheet1の[A1]に数式[=100+200+A2](A2=300)が入力されている場合
この計算結果のみを配列へ格納してからSheet2の[B1]へ表示させようと思い下記の様なコードを作成してみました。

Sub rei()

Dim Sh1Range As Variant

Set Sh1 = Worksheets("Sheet1")
Set Sh2 = Worksheets("Sheet2")

Set Sh1Range = Sh1.Range("A1")

Sh1Range.Copy Sh2.Range("B1")

End Sub

結果Sheet2の[B1]には[600]という数値ではなく数式[=100+200+A2]が表示されてしまいました。
拙い文章ではありますが回答願います。
・ツリー全体表示

【79902】指定のフォルダから画像を取込むマクロ
質問  hiro  - 18/5/21(月) 22:38 -

引用なし
パスワード
   ExcelVBA 修行中のものです。お世話になります。
さて、標題のとおり画像を取り組むマクロをネットで拾ってきて、使っているのですが、いまいち理解できない部分がありますので質問させて頂きます。
※マクロ自体は正常に稼働します。

【不明な部分】
fileName = Dir(myPath.Items.Item.Path + "\")

この部分ですが、fileNameには一体、どういったパスが入ることに
なるでしょうか?

ちなみに前段の・・・・
' フォルダ選択画面を表示
Set shell = CreateObject("Shell.Application")
Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\")
Set shell = Nothing

では、「C:\画像フォルダ」 を選択しております。


【マクロの全文】

' 指定したフォルダにある画像ファイルを読み込み、EXCELに貼り付ける。
'
Sub EggFunc_pasteDirImage()

' 変数定義
Dim fileName As String
Dim targetCol As Integer
Dim targetRow As Integer
Dim targetCell As Range
Dim shell, myPath
Dim pos As Integer
Dim extention As String
Dim isImage As Boolean

' 選択セルを取得
targetCol = ActiveCell.Column
targetRow = ActiveCell.Row

' フォルダ選択画面を表示
Set shell = CreateObject("Shell.Application")
Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\")
Set shell = Nothing
  
' フォルダを選択したら...
If Not myPath Is Nothing Then
    
fileName = Dir(myPath.Items.Item.Path + "\")
    
Do While fileName <> ""
     
' ファイル拡張子の判別
isImage = True
pos = InStrRev(fileName, ".")
If pos > 0 Then
Select Case LCase(Mid(fileName, pos + 1))
Case "jpeg"
Case "jpg"
Case "gif"
Case Else
isImage = False
End Select
Else
isImage = False
End If
      
' 拡張子が画像であれば
If isImage = True Then
        
' 貼り付け先を選択
Cells(targetRow, targetCol).Select
Set targetCell = ActiveCell
        
' 画像読込み
ActiveSheet.Pictures.Insert(myPath.Items.Item.Path + "\" + fileName).Select
        
' 画像が大きい場合、画像サイズをセル幅に合わせる
If Selection.Width > targetCell.Width Or Selection.Height > targetCell.Height Then
If Selection.Width / targetCell.Width > Selection.Height / targetCell.Height Then
Selection.Height = Selection.Height * (targetCell.Width / Selection.Width)
Selection.Width = targetCell.Width
Else
Selection.Width = Selection.Width * (targetCell.Height / Selection.Height)
Selection.Height = targetCell.Height
End If
End If
               
' 貼り付け先行を+1
targetRow = targetRow + 1
        
End If
fileName = Dir()
    
Loop
    
MsgBox "画像の読込みが終了しました"
 
End If

End Sub
・ツリー全体表示

128 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free