Excel VBA質問箱 IV

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

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


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

【81481】@かつAかつBかつCのデータ個数を数え...
質問  スズ  - 20/9/22(火) 19:25 -

引用なし
パスワード
   初心者の質問で大変申し訳ありません。

  A  B C D E
1 田中 11 66 12 55
2 佐藤 22 33 55 12
3 鈴木 11 22 00 12
4 鈴木 12 12 12 12 ←
5 鈴木 12 66 44 12
6 鈴木 12 12 12 12 ←

このような表にて、Aの"鈴木"でB-Eの全てが12であることを何個あるかを数えたい場合、どのような表計算となるのでしょうか。
この場合だと2が回答となるのですが、
初心者からcountifsかと思いましたが、まず何が基準となるのかも不明でして。。

お手数をお掛け致しますが、何卒ご協力頂けますと幸いです。
・ツリー全体表示

【81480】Re:セル内の選択文字列を赤太字にしたい
お礼  りった  - 20/9/15(火) 15:24 -

引用なし
パスワード
   ごもっともです。ありがとうございます。
・ツリー全体表示

【81479】Re:セル内の選択文字列を赤太字にしたい
発言  マナ  - 20/9/15(火) 12:47 -

引用なし
パスワード
   ▼りった さん:

>尚、どこを強調するかをマクロで判断するのは困難です。

ならば、まずは赤字にしておいて
作業が終わってから、マクロで赤字を太字に変換してはどうでしょうか。
・ツリー全体表示

【81478】セル内の選択文字列を赤太字にしたい
質問  りった  - 20/9/15(火) 9:58 -

引用なし
パスワード
   セル内の強調したい部分を、F2でセルに入って選択してから文字色赤+太字にしているのですが、セルが1000個以上有ってボタン2回押すのが面倒です。
マクロで1操作に出来ますでしょうか?可能でしたら方法をご教示ください。

尚、どこを強調するかをマクロで判断するのは困難です。
・ツリー全体表示

【81477】Re:IF文ーアクティブシート名と一致だ...
発言  γ  - 20/9/11(金) 14:48 -

引用なし
パスワード
   wsはループの中での話を単純にした説明だったのかと思っていました。
簡単な話だったのですね。

wsとだけ指定したときに、それがNameプロパティに値を返すわけではないですね。
しっかりプロパティを付ける必要があるということです。
今後、こうした場面も多かろうと思いますので、記憶下さい。

なお、nameが小文字になってしまう件ですが、
過去に、
Dim name As String
といった変数宣言をした副作用です。
Dim Name As String
とダミーで宣言して、直ぐに消せば、元のように
ws.Nameと戻るはずです。
・ツリー全体表示

【81476】Re:IF文ーアクティブシート名と一致だ...
発言  [名前なし]  - 20/9/11(金) 13:43 -

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

解決しました!

If ActiveSheet.name = "MS&AD" Then

でした。


>
>ご返信をありがとうございます。
>下のように、ws1を使用せずに、シート名をダイレクトに書きにし、“Name”もドットを打って出てくるリストから選択したのですが、“.Name”が“.name”と小文字に自動変更してしまいます。そして、この行がエラーになります。
>どうしてなんでしょうか。
>
>Dim wsActive As Worksheet
>Set wsAvtive = ActiveSheet
>
>If wsActive.Name = Worksheets("MS&AD").Name Then
>↓
>If wsActive.name = Worksheets("MS&AD").name Then
>
>
>>if wsActive.name = ws1 then
>>  ↓
>>If wsActive.Name = ws1.Name Then
>>としてください。
>>
>>なお、投稿にあたっては、VBEの画面から
>>直接コピーペイストして、手打ちは避けてください。
>>Set ws1 = Worksheet("MSAD")はエラーになるはずです。
・ツリー全体表示

【81475】Re:IF文ーアクティブシート名と一致だ...
質問  [名前なし]  - 20/9/11(金) 13:03 -

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

ご返信をありがとうございます。
下のように、ws1を使用せずに、シート名をダイレクトに書きにし、“Name”もドットを打って出てくるリストから選択したのですが、“.Name”が“.name”と小文字に自動変更してしまいます。そして、この行がエラーになります。
どうしてなんでしょうか。

Dim wsActive As Worksheet
Set wsAvtive = ActiveSheet

If wsActive.Name = Worksheets("MS&AD").Name Then

If wsActive.name = Worksheets("MS&AD").name Then


>if wsActive.name = ws1 then
>  ↓
>If wsActive.Name = ws1.Name Then
>としてください。
>
>なお、投稿にあたっては、VBEの画面から
>直接コピーペイストして、手打ちは避けてください。
>Set ws1 = Worksheet("MSAD")はエラーになるはずです。
・ツリー全体表示

【81474】Re:IF文ーアクティブシート名と一致だ...
回答  γ  - 20/9/11(金) 12:21 -

引用なし
パスワード
   if wsActive.name = ws1 then
  ↓
If wsActive.Name = ws1.Name Then
としてください。

なお、投稿にあたっては、VBEの画面から
直接コピーペイストして、手打ちは避けてください。
Set ws1 = Worksheet("MSAD")はエラーになるはずです。
・ツリー全体表示

【81473】IF文ーアクティブシート名と一致だった...
質問  ぐりぐり  - 20/9/11(金) 10:43 -

引用なし
パスワード
   こんにちわ。

Activeのシート名が一致している場合は、ある動き(ここでは"メッセージ表示"としています)をする、というモジュールを作成したいのですが、上手く動きません。

どこをどう直せばいいのか判らず、助けていただけますでしょうか。
よろしくお願いします!


Dim wsActive as Worksheet
Dim ws1 as Worksheet

Set wsActive = ActiveSheet
Set ws1 = Worksheet("MSAD")

if wsActive.name = ws1 then

Msgbox"OK"

Else

Msgbox"ちがうよ"

End if
・ツリー全体表示

【81472】Re:エクセルVBAのWorkSheet_Change実施後...
発言  γ  - 20/9/11(金) 7:43 -

引用なし
パスワード
   あなたが言うところの"最初のセル"は、"D8"セルに固定なんですかね。
コードの意図がわからないので、なんともコメントのしようがないので、
あなたの意図をもう少し説明されるとよいと思います。

参考までにコメントしておくと、
Target引数には、変更になったセルが渡されますから、
そのアドレスで判断して、
・特定のセルが変更になった場合だけ処理をする(それ以外は直ぐにプロシージャを抜ける)ことや、
・逆に、特定のセル以外が変更になった場合だけ処理をする、
といったことができます。

あなたの意図に沿ってそれらを使えることができると思います。
・ツリー全体表示

【81471】Re:エクセルVBAのWorkSheet_Change実施後...
発言  γ  - 20/9/9(水) 16:12 -

引用なし
パスワード
   セットができてからも、相変わらずそのイベントプロシージャは
動作しますよ。
なにか入力しても、指定したセルには予め決めたものが
書き込まれると、あなたが指示された訳ですが、
そにあたりはどのように整理されていますか?
・ツリー全体表示

【81470】エクセルVBAのWorkSheet_Change実施後の...
質問  たか E-MAIL  - 20/9/9(水) 14:25 -

引用なし
パスワード
   エクセルで、各項目への入力漏れを減らすために、最初のセルに入力があれば、他の入力必須項目に薄灰色文字で「入力」と表示させ、そこに入力があるとその文字が消え、通常通りに黒文字で入力ができるようにしたいです。
VBAをどうにか調べて書き、
1. 最初のセルに入力があれば、他の必須項目に薄灰色文字で「入力」と表示させる
2. 最初のセルが空白になれば、他の必須項目の「入力」が消える
ようには出来たのですが、実際に必須項目に「入力」と表示されたセルに文字入力をしようとすると、
1. 上書きが全くできず灰色文字の「入力」に戻ってしまう
2. 最初のセルが空白であれば、入力必須項目に入力しても空白になる
という状況です。
下記の通りのVBAを作ってみたのですが、どこが間違っているのでしょうか?
どのように記載すればよいでしょうか?
どなたかご教示をお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  Application.ScreenUpdating = False
    If Range("D8") <> "" Then
      Call 入力推奨文字表示
    Else
      Range("R5,Y6,Y9,AB6,AB9,AG5,AM5,AS6,AS9,AX9,AY6,BF7,BF9,BG5,BL5") = ""
    End If
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub

Sub 入力推奨文字表示()
  Application.EnableEvents = False
  Application.ScreenUpdating = False
    With Range("R5,AB6,AB9,AG5,AM5,AS6,AS9,AX9,AY6,BF7,BF9,BG5")
      .Value = "入力"
      .Font.ColorIndex = 15
      .Font.Bold = True
    End With
  選択
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub
      
Sub 選択()
  Application.EnableEvents = False
  Application.ScreenUpdating = False
     Range("Y6,Y9") = "未"
     Range("BL5") = "選択"
  Application.EnableEvents = True
  Application.ScreenUpdating = True
    
End Sub
・ツリー全体表示

【81469】Re:EXCELの条件付き書式のフォントサイズ...
お礼  やまちゃん  - 20/9/7(月) 19:27 -

引用なし
パスワード
   ▼γ さん:
>>VBAを使えばフォントサイズも自由に変更出来るかと思うのですが、
>>どのようにコードを記述すればいいでしょうか?
>
>条件付き書式の適用を条件とするなら、それは無理な注文です。
>フォントの大きさ変更は条件付き書式ではできませんから、
>VBAにしたからといって、それが可能になることはありません。
>
>条件付き書式から離れて、ということであれば、
>もちろんフォントの大きさ変更は可能です。
>マクロ記録をとれば、Selection.Font.Size = xxのようなものが判明するはずです。
>あとは、ご自分で条件判定するロジックを書いてください。
>ちょっと意味がとれなかったので、その点はそちらで検討してください。
>
>そのマクロをどういうタイミングで実行するかという話もありますし、
>条件付き書式の範囲内で納めるのがよいと思いますよ。
>(例えば、塗りつぶしには、色を使わないパターンもありますから、
>灰色6.25%などを使えば、プリントしても目立つのでは?)
>
>なお、8/12に投稿された方と同じであれば、
>新規投稿ではなく、こちらのコメントに「返信」する形で
>返事をしてください。

γさん、お返事ありがとうございます。
中途半端な質問ですみません。
もう一度、考えてみます。
できるところまでやってみてわからない時は再度質問させて頂きます。
・ツリー全体表示

【81468】Re:EXCELの条件付き書式のフォントサイズ...
発言  γ  - 20/9/7(月) 9:31 -

引用なし
パスワード
   >VBAを使えばフォントサイズも自由に変更出来るかと思うのですが、
>どのようにコードを記述すればいいでしょうか?

条件付き書式の適用を条件とするなら、それは無理な注文です。
フォントの大きさ変更は条件付き書式ではできませんから、
VBAにしたからといって、それが可能になることはありません。

条件付き書式から離れて、ということであれば、
もちろんフォントの大きさ変更は可能です。
マクロ記録をとれば、Selection.Font.Size = xxのようなものが判明するはずです。
あとは、ご自分で条件判定するロジックを書いてください。
ちょっと意味がとれなかったので、その点はそちらで検討してください。

そのマクロをどういうタイミングで実行するかという話もありますし、
条件付き書式の範囲内で納めるのがよいと思いますよ。
(例えば、塗りつぶしには、色を使わないパターンもありますから、
灰色6.25%などを使えば、プリントしても目立つのでは?)

なお、8/12に投稿された方と同じであれば、
新規投稿ではなく、こちらのコメントに「返信」する形で
返事をしてください。
・ツリー全体表示

【81467】EXCELの条件付き書式のフォントサイズに...
質問  やまちゃん  - 20/9/6(日) 17:22 -

引用なし
パスワード
   度々、お世話になります。
VBA勉強中につき、どなたかお知恵をお貸し願います。

EXCELである商品の発注書を作成中。
1列から9列目(行数は商品アイテムにより変化する)には発注書のフォーマットがあり、同一シートの13列目には基本の上代、14列目〜21列目はそれぞれ微妙に異なるパターンの変更上代が記載されており、あるルールに従って発注書の上代記載箇所の5列目に関数を使用してそれぞれの顧客に対応した上代を表示(変更しないのもあるため、混在する)。
そこで、条件付き書式を使い、基本上代13列目と異なる場合は太字の斜体としていますが、条件付き書式ではフォントサイズが変更できないので、目立ちません。
しかもプリントアウトするのはモノクロの為、FONTカラー意味がありません。

13列目   14列目    15列目

基本上代  パターン1  パターン2

100     110     120
120     130     140
150     150     160

このような対応表があるとして、A店を店舗コードで呼び出すと、発注書の上代がパターン1の上代となり、ここでは110と130だけが基本と異なるので太字の斜体。
B店を呼び出すとパターン2の上代となり、全て太字の斜体となる。
C店は基本のまま。


VBAを使えばフォントサイズも自由に変更出来るかと思うのですが、どのようにコードを記述すればいいでしょうか?
勉強不足の為、ほぼ、丸投げとなってしまいますが、サンプルとなるコードを教えていただけないでしょうか?
どなたか、宜しくお願いします。
・ツリー全体表示

【81466】Re:APIの引数へVBAからnull 及び構造体を...
回答  core  - 20/8/23(日) 22:36 -

引用なし
パスワード
   VBAでのポインター操作は制約が多いので、API宣言を下記のようにしてください。

Private Declare PtrSafe Function _
  SetupDiGetDeviceInterfaceDetail Lib "SetupAPI.dll" _
  Alias "SetupDiGetDeviceInterfaceDetailA" ( _
  ByVal DeviceInfoSet As LongPtr, _
  ByVal pDeviceInterfaceData As LongPtr, _
  Optional ByVal pDeviceInterfaceDetailData As LongPtr, _
  Optional ByVal DeviceInterfaceDetailDataSize As Long, _
  Optional ByVal pRequiredSize As LongPtr, _
  Optional ByVal pDeviceInfoData As LongPtr) As Long

使用はこんな風になります。

dim sz as long, hr as long
dim data as SP_DEVICE_INTERFACE_DATA

'// 必要bufferサイズ取得
hr = SetupDiGetDeviceInterfaceDetail(hDev, VarPtr(data), , , VarPtr(sz))
' :
'// メモリ確保: ptr
' :
'// SP_DEVICE_INTERFACE_DETAIL_DATA中身取得
hr = SetupDiGetDeviceInterfaceDetail(hDev, VarPtr(data), ptr, sz)

※無駄なANSI-Unicode文字列変換が行われるので、
 Ansi系API宣言は避けるべきです。xxxW系のAPI宣言が望ましいです。
・ツリー全体表示

【81465】Re:for next ループ
発言  マナ  - 20/8/18(火) 19:22 -

引用なし
パスワード
   ▼J さん:
>以下の別ブックからのコピペのループがうまくいかず頭を抱えております・・・
>ご指南頂けると幸いです。

ループを使って、完結でわかりやすい記述にしたい
ということでしょうか。

でしたら、そのいまくいかないというコードもみせてください。
提示されたコードから、繰り返しのルールを考えるのは、面倒なので。
・ツリー全体表示

【81464】Re:指定フォルダ内最新ファイル名の転記...
発言  マナ  - 20/8/18(火) 18:55 -

引用なし
パスワード
   ht tps://www.moug.net/faq/viewtopic.php?t=79745&sid=6ce23987bdac47d12924fd3c8c6d9bc7
・ツリー全体表示

【81463】Re:for next ループ
回答  γ  - 20/8/18(火) 7:59 -

引用なし
パスワード
   うまくいかない、ということをもう少し詳しく書いてください。
エラーがでるなら、どこで発生して、どんなエラーか。
想定と異なるなら、想定と実際の差異を説明してください。
・ツリー全体表示

【81462】for next ループ
質問  J  - 20/8/18(火) 7:43 -

引用なし
パスワード
   以下の別ブックからのコピペのループがうまくいかず頭を抱えております・・・
ご指南頂けると幸いです。

WBsaki.Worksheets(1).Range("A2:A9").Value = WBmoto.Worksheets(1).Range("C5:C12").Value
WBsaki.Worksheets(1).Range("B2:B9").Value = WBmoto.Worksheets(1).Range("D5:D12").Value
WBsaki.Worksheets(1).Range("C2:C9").Value = WBmoto.Worksheets(1).Range("A4").Value
WBsaki.Worksheets(1).Range("D2:D9").Value = WBmoto.Worksheets(1).Range("I5:I12").Value
WBsaki.Worksheets(1).Range("E2:E9").Value = WBmoto.Worksheets(1).Range("J5:J12").Value
  
WBsaki.Worksheets(1).Range("A10:A17").Value = WBmoto.Worksheets(1).Range("L5:L12").Value
WBsaki.Worksheets(1).Range("B10:B17").Value = WBmoto.Worksheets(1).Range("M5:M12").Value
WBsaki.Worksheets(1).Range("C10:C17").Value = WBmoto.Worksheets(1).Range("A4").Value
WBsaki.Worksheets(1).Range("D10:D17").Value = WBmoto.Worksheets(1).Range("R5:R12").Value
WBsaki.Worksheets(1).Range("E10:E17").Value = WBmoto.Worksheets(1).Range("S5:S12").Value
  
WBsaki.Worksheets(1).Range("A18:A25").Value = WBmoto.Worksheets(1).Range("U5:U12").Value
WBsaki.Worksheets(1).Range("B18:B25").Value = WBmoto.Worksheets(1).Range("V5:V12").Value
WBsaki.Worksheets(1).Range("C18:C25").Value = WBmoto.Worksheets(1).Range("A4").Value
WBsaki.Worksheets(1).Range("D18:D25").Value = WBmoto.Worksheets(1).Range("AA5:AA12").Value
WBsaki.Worksheets(1).Range("E18:E25").Value = WBmoto.Worksheets(1).Range("AB5:AB12").Value
  
WBsaki.Worksheets(1).Range("A26:A33").Value = WBmoto.Worksheets(1).Range("AD5:AD12").Value
WBsaki.Worksheets(1).Range("B26:B33").Value = WBmoto.Worksheets(1).Range("AE5:AE12").Value
WBsaki.Worksheets(1).Range("C26:C33").Value = WBmoto.Worksheets(1).Range("A4").Value
WBsaki.Worksheets(1).Range("D26:D33").Value = WBmoto.Worksheets(1).Range("AJ5:AJ12").Value
WBsaki.Worksheets(1).Range("E26:E33").Value = WBmoto.Worksheets(1).Range("AK5:AK12").Value
 
WBsaki.Worksheets(1).Range("A34:A41").Value = WBmoto.Worksheets(1).Range("C15:C22").Value
WBsaki.Worksheets(1).Range("B34:B41").Value = WBmoto.Worksheets(1).Range("D15:D22").Value
WBsaki.Worksheets(1).Range("C34:C41").Value = WBmoto.Worksheets(1).Range("A14").Value
WBsaki.Worksheets(1).Range("D34:D41").Value = WBmoto.Worksheets(1).Range("I15:I22").Value
WBsaki.Worksheets(1).Range("E34:E41").Value = WBmoto.Worksheets(1).Range("J15:J22").Value

WBsaki.Worksheets(1).Range("A42:A49").Value = WBmoto.Worksheets(1).Range("L15:L22").Value
WBsaki.Worksheets(1).Range("B42:B49").Value = WBmoto.Worksheets(1).Range("M15:M22").Value
WBsaki.Worksheets(1).Range("C42:C49").Value = WBmoto.Worksheets(1).Range("A14").Value
WBsaki.Worksheets(1).Range("D42:D49").Value = WBmoto.Worksheets(1).Range("R15:R22").Value
WBsaki.Worksheets(1).Range("E42:E49").Value = WBmoto.Worksheets(1).Range("S15:S22").Value

WBsaki.Worksheets(1).Range("A50:A57").Value = WBmoto.Worksheets(1).Range("U15:U22").Value
WBsaki.Worksheets(1).Range("B50:B57").Value = WBmoto.Worksheets(1).Range("V15:V22").Value
WBsaki.Worksheets(1).Range("C50:C57").Value = WBmoto.Worksheets(1).Range("A14").Value
WBsaki.Worksheets(1).Range("D50:D57").Value = WBmoto.Worksheets(1).Range("AA15:AA22").Value
WBsaki.Worksheets(1).Range("E50:E57").Value = WBmoto.Worksheets(1).Range("AB15:AB22").Value

WBsaki.Worksheets(1).Range("A58:A65").Value = WBmoto.Worksheets(1).Range("AD15:AD22").Value
WBsaki.Worksheets(1).Range("B58:B65").Value = WBmoto.Worksheets(1).Range("AE15:AE22").Value
WBsaki.Worksheets(1).Range("C58:C65").Value = WBmoto.Worksheets(1).Range("A14").Value
WBsaki.Worksheets(1).Range("D58:D65").Value = WBmoto.Worksheets(1).Range("AJ15:AJ22").Value
WBsaki.Worksheets(1).Range("E58:E65").Value = WBmoto.Worksheets(1).Range("AK15:AK22").Value
・ツリー全体表示

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