Excel VBA質問箱 IV

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

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


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

【81461】指定フォルダ内最新ファイル名の転記(連...
質問  V  - 20/8/17(月) 22:53 -

引用なし
パスワード
   勉強不足で申し訳ありません
繰り返し処理について教えてください。

列B8〜にフォルダ保存バスが入っています。
列C8〜に列Bで指定したフォルダに存在するファイルの内
最新(直近に作成された)のファイル名を
表示させたいといろいろなサイトを検索して
以下を作りました。

Sub ファイル名転記()
Dim fso, fol, fc, f1, f2
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder(Cells(8, 2))
Set fc = fol.Files

For Each f1 In fc
If IsEmpty(f2) = True Then
Set f2 = fso.GetFile(f1)
End If
If f1.DateLastModified > f2.DateLastModified Then
Set f2 = fso.GetFile(f1)
End If
Next
Cells(8, 3).Value = f2.Name
End Sub

これをB列にデータがあれば全てのC列に自動的にデータが転記されるようにしたいと
以下のとおり作ってみましたが、全く反応しませんでした、
どのように作り替えればよいのか、どなたかご教授頂けませんでしょうか。
どうぞよろしくお願いします。

Sub 連続ファイル名転記()
Dim i As Long
Dim MaxRow As Long
MaxRow = Sheets("添付書類").Cells(Rows.Count, 2).End(xlUp).Row

For i = 1 To MaxRow
Dim fso, fol, fc, f1, f2
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder(Cells(i, 2))
Set fc = fol.Files
For Each f1 In fc
If IsEmpty(f2) = True Then
Set f2 = fso.GetFile(f1)
End If
If f1.DateLastModified > f2.DateLastModified Then
Set f2 = fso.GetFile(f1)
End If
Next
Cells(i, 3).Value = f2.Name
Next i
End Sub 
・ツリー全体表示

【81460】Re:セルの保護について
お礼  takumi  - 20/8/17(月) 14:18 -

引用なし
パスワード
   ▼マナ さん:
解決しました!
ありがとうございます!!


>▼takumi さん:
>
>>どうすれば常に3行目のみロックを外すことができますでしょうか。】
>
>毎回、全セルロックしてから、
>3行目のみロックを解除
>
>With ActiveSheet
>  .Unprotect
>  .Rows(3).Insert
>  .Cells.Locked = True
>  .Rows(3).Locked = False
>  .Protect
>End With
・ツリー全体表示

【81459】APIの引数へVBAからnull 及び構造体を入...
質問  作業者A  - 20/8/17(月) 12:19 -

引用なし
パスワード
   win64APIの引数へVBAからnull 及び構造体を入れる方法を教えてください。

win64APIのSetupDiGetDeviceInterfaceDetail第3引数はNullと構造体で機能が違います。
VBAからこの第3引数へnull または構造体を入れる方法を教えてください。

Private Declare PtrSafe Function SetupDiGetDeviceInterfaceDetail Lib "setupapi.dll" _
  Alias "SetupDiGetDeviceInterfaceDetailA" ( _
  ByVal DeviceInfoSet As LongPtr, _
  ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, _
  ByRef DeviceInterfaceDetailData As SP_DEVICE_INTERFACE_DETAIL_DATA, _ ←第3引数
  ByVal DeviceInterfaceDetailDataSize As Long, _
  ByRef RequiredSize As Long, _
  ByVal DeviceInfoData As String _  ←Null固定なのでstring宣言でVbnullstringを入れる
) As Boolean

C#ならばintptr.zeroを使いますが,VBAはvbnullstringを使うために第3因数を文字列にしなければなりません。
ByVal DeviceInterfaceDetailData As String, _ ←第3引数
これでvbnullstringを入れると機能は動作します。
すると次に構造体を引き渡す方法がわかりません。

仮に構造体宣言のままで DeviceInterfaceDetailDataへ構造体を引き渡すと必ず以下のエラーが返ってきます。
「ERROR_INVALID_USER_BUFFER 1784 0x6F8 要求された操作に対して与えられたバッファーが無効です。」

試しに
Call ZeroMemory(sDeviceInterfaceDetailData, 8)で構造体を初期化してみましたが同じエラーでした。

このようなAPIの引数渡し方法をお教えください。
・ツリー全体表示

【81458】Re:セルの保護について
発言  マナ  - 20/8/15(土) 13:42 -

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

>どうすれば常に3行目のみロックを外すことができますでしょうか。】

毎回、全セルロックしてから、
3行目のみロックを解除

With ActiveSheet
  .Unprotect
  .Rows(3).Insert
  .Cells.Locked = True
  .Rows(3).Locked = False
  .Protect
End With
・ツリー全体表示

【81457】セルの保護について
質問  takumi  - 20/8/15(土) 12:58 -

引用なし
パスワード
   VBA初心者です。
ご教授いただきたく利用させていただきました。

やりたいこと。
【ユニフォームの在庫データ入力後、更新ボタンを押すと、3行目にセルが挿入され、3行目以外には、保護がかかりデータ変更不可にするプログラムを構成したいです。】
現状。
【セルの挿入を行うプログラムまでは組めましたが、4行目以降を常にロックするプログラムを組みましてもセルを挿入すると対応するセルが動いてしまい、3行目にロックがかかってしまい、更新するごとにロックされていないセルが4行目、5行目と動いていきます。
どうすれば常に3行目のみロックを外すことができますでしょうか。】

入力した文
【Sub 更新()
Range("3:3").Insert
Range("a3:f3,h3:l3,n3:r3,t3:x3,z3:ad3,af3:aj3").Interior.ColorIndex = 0
If ActiveSheet.ProtectContents = False Then
Cells.Locked = True
ActiveSheet.Range("$a$34:$f$4").Locked = False
ThisWorkbook.Worksheets("納品ユニフォーム").Protect UserInterfaceOnly:=True
End If

End Sub】
・ツリー全体表示

【81456】[無題]
お礼  やまちゃん  - 20/8/12(水) 10:01 -

引用なし
パスワード
   マナさんありがとうございました。
aうまく使えました。
こういう使い方があったんですね。勉強になりました。
質問の1も再度確認したら大丈夫になり、こちらは自己解決しました。
また何かありましたら質問させて頂きますので、その際は宜しくお願いします。
・ツリー全体表示

【81455】Re:For Next とオートフィルタ
発言  マナ  - 20/8/12(水) 7:51 -

引用なし
パスワード
   ▼やまちゃん さん:

>2.オートフィルタ―を列が1つずれる毎に同列のオートフィルタ―をかけ直したい。
>Sheets("Sheet1").Range("$O$11:$AG$74").AutoFilter Field:=1, Criteria1:=○
>この記述のAutoFilter Field:=1←この部分は一回ずつField:=2、Field:=3 …
>なんてナンセンスですよね?

aを利用できないですか
・ツリー全体表示

【81454】For Next とオートフィルタ
質問  やまちゃん  - 20/8/12(水) 1:31 -

引用なし
パスワード
   こんばんは。VBA初心者です。
詳しく教えていただけると助かります。

店舗別の発注書を自動作成したい。

Sheet1のセルA:Iの列には一定のフォーマット(全商品アイテム)があり、同一シート内のL:AGの列には店舗一覧とその店舗に対応した商品がO12:AG12以下の行に○、×、空白などの情報が入っています。

O9:AG9に記載している店舗コードを1店舗づつH6 に転記すると同時にオートフィルタ―で○だけを表示したら、最後に店舗コードに対応した店舗名がH7に記載されているので、その店舗名で保存。
これをAG列に記載の店舗コードまで19店舗分繰り返す。


For a = 14 To 32 Step 1  

 
  Sheets("Sheet1").Select
 
  Range("H6").Value = Cells(9, a + 1)
 
  Sheets("Sheet1").Range("$O$11:$AG$74").AutoFilter Field:=1, Criteria1:=○

   ・
   ・ (省略)
   ・

Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("H7").Value
  
   
  Sheets("Sheet1").Range("$O$11:$AG$74").AutoFilter

Next a


ここからが質問です。

1.上記のように記述してみたところ、途中までは次々の店舗コードを呼んでくれるのですが、4〜5店舗過ぎたあたりから次の店舗コードを読み取れなくなりました。
何故?どこがおかしいのでしょうか?

2.オートフィルタ―を列が1つずれる毎に同列のオートフィルタ―をかけ直したい。
Sheets("Sheet1").Range("$O$11:$AG$74").AutoFilter Field:=1, Criteria1:=○
この記述のAutoFilter Field:=1←この部分は一回ずつField:=2、Field:=3 …
なんてナンセンスですよね?
もっと画期的な方法があればご教授願います。

以上宜しくお願いします。
・ツリー全体表示

【81453】Re:ジャンプ先を印刷範囲に設定→印刷 ...
お礼  初心者  - 20/8/11(火) 10:11 -

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

>「選択した部分を印刷」でできたのですか。
>できたのなら、その操作を「マクロの記録」するだけです。

なるほど!!そういうことですね。
ありがとうございました!!
・ツリー全体表示

【81452】Re:複数の値からある合計に一致するすべ...
お礼  ゆきぼ  - 20/8/9(日) 21:39 -

引用なし
パスワード
   ▼γ さん:
>参考サイトの記事のなかでも紹介されていますが、
>hatenaさん作成になるこちらの記事が参考になると思います。
> ht tps://hatenachips.blog.fc2.com/blog-entry-430.html
>
>アルゴリズムの説明のほか、実際に動作するxlsmファイルも
>提供されていますので、試行することができます。

参考サイトのご紹介ありがとうございます。
早速、サイトを見させていただきます。
・ツリー全体表示

【81451】Re:複数の値からある合計に一致するすべ...
お礼  ゆきぼ  - 20/8/9(日) 21:14 -

引用なし
パスワード
   ▼マナ さん:
アドバイスをありがとうございます。
海外のサイトなども見てみたいと思います。
ありがとうございました。
・ツリー全体表示

【81450】Re:ジャンプ先を印刷範囲に設定→印刷 ...
発言  マナ  - 20/8/7(金) 22:01 -

引用なし
パスワード
   ▼初心者 さん:

>複数人が使えるように、ボタンにしておきたく、
>「選択した部分を印刷」とせずともその範囲のみを印刷出来るようにしたいのです

「選択した部分を印刷」でできたのですか。
できたのなら、その操作を「マクロの記録」するだけです。
・ツリー全体表示

【81449】Re:ジャンプ先を印刷範囲に設定→印刷 ...
質問  初心者  - 20/8/7(金) 14:19 -

引用なし
パスワード
   ▼マナ さん:
>▼初心者 さん:
>
>>マクロの記録の印刷から、編集で書き足していました。
>
>印刷するときに、「選択した部分を印刷」というのを選んでください。
>それで記録したものが、そのまま使えるはずです。書き足し不要です。

複数人が使えるように、ボタンにしておきたく、
「選択した部分を印刷」とせずともその範囲のみを印刷出来るようにしたいのですが、
これは難しいでしょうか?
・ツリー全体表示

【81448】Re:ジャンプ先を印刷範囲に設定→印刷 ...
発言  マナ  - 20/8/6(木) 20:18 -

引用なし
パスワード
   ▼初心者 さん:

>マクロの記録の印刷から、編集で書き足していました。

印刷するときに、「選択した部分を印刷」というのを選んでください。
それで記録したものが、そのまま使えるはずです。書き足し不要です。
・ツリー全体表示

【81447】Re:表へ転記で途中から上書きを繰り返し...
発言  γ  - 20/8/6(木) 16:49 -

引用なし
パスワード
   ▼もち さん:
>登録した情報を別シートの一覧表に転記していき、一行目から順に100個転記したら101個目からはまた一行目へ戻り上書きしていくものを作りたいです。
>現在、100個転記するものは作ることができましたが、空欄チェックを条件にすると上書きはできないので、なにかいい方法がないかと考えています。

意味が取れないのですが、
100個書いた後で
次の100個はどこに書きたいのですか?

上書きが不可なら、その右の列というのが自然の発想ですが、
どうなんですか。
相手は機械なので、
ちゃんと指示しないと忖度してはくれませんよ。
・ツリー全体表示

【81446】表へ転記で途中から上書きを繰り返したい
質問  もち  - 20/8/6(木) 12:58 -

引用なし
パスワード
   登録した情報を別シートの一覧表に転記していき、一行目から順に100個転記したら101個目からはまた一行目へ戻り上書きしていくものを作りたいです。

現在、100個転記するものは作ることができましたが、空欄チェックを条件にすると上書きはできないので、なにかいい方法がないかと考えています。
初学者なため思いつかず… 知識を与えていただきたいです…!

※表が2行目から始まるのでiの初期値は2にしています。

Dim i
For i = 2 To 101
  If Sheets("表").Range("A" & i).Value = "" Then
   Sheets("表").Range("A" & i).Value = Sheets("入力").Range("C2").Value
   Sheets("表").Range("B" & i).Value = Sheets("入力").Range("C3").Value
   Sheets("表").Range("C" & i).Value = Sheets("入力").Range("C4").Value
   Exit For
 End If
Next i
・ツリー全体表示

【81445】Re:ジャンプ先を印刷範囲に設定→印刷 ...
質問  初心者  - 20/8/6(木) 9:14 -

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

度々ありがとうございます。

>1)そのマクロをここに貼り付けてください
>2)そのマクロは、どこに記述しましたか

そのマクロはうまくいかず、削除してしまっているのですが、
マクロの記録の印刷から、編集で書き足していました。
その時に、セル番地が指定された記述になってしまったように思いました。


>3)印刷範囲(ジャンプ先)は、複数シートにあるのか
>  それとも1つのシート内に複数箇所なのでしょうか

シートは複数ありますが、
ジャンプ元とジャンプ先はそれぞれ同一シートの中に複数個所あります。
・ツリー全体表示

【81444】Re:ジャンプ先を印刷範囲に設定→印刷 ...
発言  マナ  - 20/8/5(水) 20:56 -

引用なし
パスワード
   ▼初心者 さん:

>何か間違えたようで、同じページばかり印刷されてしまったので

1)そのマクロをここに貼り付けてください
2)そのマクロは、どこに記述しましたか
3)印刷範囲(ジャンプ先)は、複数シートにあるのか
  それとも1つのシート内に複数箇所なのでしょうか


 
・ツリー全体表示

【81443】Re:ジャンプ先を印刷範囲に設定→印刷 ...
質問  初心者  - 20/8/5(水) 11:35 -

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

ありがとうございます。

>>そうすると、名前の定義された1番のセル範囲(出力したい領収書の範囲)にジャンプします。
>
>ここは、ハイパーリンク関数でしょうか??

そうです。ここはハイパーリンクの関数です。


>印刷範囲に設定する必要があるのでしょうか?
>単に、選択範囲を印刷というマクロではだめなのでしょうか。

設定しなくてもそのまま印刷が出来ればそれでいいです。
何か間違えたようで、同じページばかり印刷されてしまったので
都度設定する必要があるのかな、と思ったんです。

引き続きよろしくお願いいたします。
・ツリー全体表示

【81442】Re:ジャンプ先を印刷範囲に設定→印刷 ...
発言  マナ  - 20/8/3(月) 19:04 -

引用なし
パスワード
   ▼初心者 さん:

>そうすると、名前の定義された1番のセル範囲(出力したい領収書の範囲)にジャンプします。

ここは、ハイパーリンク関数でしょうか??


>氏名をクリックしてジャンプするところまでは目で確認したいため手動でいいのですが、その部分を印刷範囲に設定して印刷する。

印刷範囲に設定する必要があるのでしょうか?
単に、選択範囲を印刷というマクロではだめなのでしょうか。
・ツリー全体表示

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