Excel VBA質問箱 IV

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

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


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

【79927】Excelで家計簿制作中
質問  家計簿Excel  - 18/5/28(月) 15:03 -

引用なし
パスワード
   Excelで家計簿作っていてVBAにチャレンジしていて

レシートを書く一覧表を作っていて、ユーザーフォームから入力出来る仕様にしてみました。
使用用途ごとにお金の流れを見れたらいいなと思い、ピポットテーブルで色分け・フィルター機能を追加しました。
すると下記のコードで書き込もうとすると(コードは最後に記載します)
ピポットテーブルの枠の外からしか書き込まなくなりました。

何かいい方法はありませんか??
それともピポットテーブルは諦めるべきでしょうか・・・
ご教授下さい。

Private Sub btnOk_Click()
 Dim lastRow As Long
    With Worksheets("一覧")
    Range("F3:H4").Select
    lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
    .Cells(lastRow, 2) = Me.txt購入日.Text
  End With
End Sub
・ツリー全体表示

【79926】Re:Sendkeysで制御文字と全角文字が送れ...
回答  亀マスター  - 18/5/26(土) 22:52 -

引用なし
パスワード
   SendKeysで全角文字がうまく送れないというのは割とよくあることのようです。

対応方法としては、クリップボードに必要な文字を送り、それから Ctrl+Vで貼り付けるというのがいいようです(対象のアプリケーションでの貼り付け操作がCtrl+Vの場合)。

Sub test()

  'Microsoft Forms 2.0 Object Libraryへの参照設定が必要
  '参照設定したくないならCreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")で
  With New MSForms.DataObject
    .SetText "あいうえお"
    .PutInClipboard
  End With

  With CreateObject("Wscript.Shell")
   .SendKeys "^v", True
  End With

End Sub

Tabがうまく働かなかった理由ははっきりと言えませんが、対象のアプリケーションで、普通にTabキーを押すとTab文字が挿入されるのでしょうか。
Tabはカーソルの移動でもよく使いますので、そういう動作になっていませんか?SendKeysの{Tab}は特殊文字としてのTabを挿入する機能ではなく、単にTabキーを押すという役割ですので。
・ツリー全体表示

【79925】Sendkeysで制御文字と全角文字が送れない
質問  山田  - 18/5/26(土) 16:41 -

引用なし
パスワード
   別のアプリケーションにSendkeysでキーイベントを送ろうとしています。
通常のSendkeysでは送れなかったため、
With CreateObject("Wscript.Shell")
 .SendKeys "ABC{TAB}", True
End With
で送ろうとしました。

半角の英数字は送れたのですが、TAB等の制御文字が反応せず、全角文字は文字化けしてしまいました。
制御文字や全角文字を送るにはどうしたらよいでしょうか。
・ツリー全体表示

【79924】Re:指定のフォルダから画像を取込むマクロ
回答  γ  - 18/5/23(水) 23:26 -

引用なし
パスワード
   まずは、下記のサイトでデバッグの仕方を勉強されたらいかがでしょうか。
ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030_03.html

質問してコメントがあったら、とりあえず返事くらいしてください。
最低限のマナーだと思いますよ。
・ツリー全体表示

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

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

こめんなさい

>      Set 参照セル = Nothing

これは、不要でした。

>      On Error Resume Next
>      Set 参照セル = セル.DirectPrecedents
>      On Error Resume Next

後からの、
On Error Resume Next

On Error GoTo 0
でした。
・ツリー全体表示

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

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

試してみてください

ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim セル As Range
  Dim 参照セル As Range
  
  Application.EnableEvents = False
  For Each セル In Target
    If セル.HasFormula Then
      Set 参照セル = Nothing
      On Error Resume Next
      Set 参照セル = セル.DirectPrecedents
      On Error Resume Next
      If Not 参照セル Is Nothing Then
        MsgBox "その入力は禁止されています"
        Application.Undo
        Exit For
      End If
    End If
  Next
  Application.EnableEvents = True
  
End Sub
・ツリー全体表示

【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 イベントなるものがあるみたいですね。
これ使えば何とかなるかな?
・ツリー全体表示

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