Excel VBA質問箱 IV

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

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


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

【79296】Re:隣のセルが空白でない場合に値を入力...
お礼  VBA勉強始めました  - 17/7/5(水) 16:13 -

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

シートによっては1だったり2だったりするのですが
教えて頂いたコードでやりたいことができました。

私も早くマナさんのようにVBAが使いこなせるようになりたいです。

今回の件では本当にたくさんお世話になりました。
ありがとうございました。

>▼VBA勉強始めました さん:
>
>>ws.Range("A1").CurrentRegion.Columns(1).Select.Value=1
>
>すべて1ですか? 
>こうです。
>
>範囲.Select
>Selection.Value = 1
>
>または、1行で
>
>範囲.Value = 1
>
>とします。
>
>Sub test2()
>  Dim ws As Worksheet
> 
>  Set ws = ActiveSheet
> 
>  ws.Columns(1).Insert
>  ws.Range("A1").CurrentRegion.Columns(1).Value = 1
>  
>End Sub
>
>
・ツリー全体表示

【79295】Re:マクロ、VBAのコード
発言  γ  - 17/7/4(火) 22:36 -

引用なし
パスワード
   コメントのありましたとおりかと思います。
単にコードを書いて、ということでなく、
あなたが、どこまでトライしたかを示した方が、良いと思います。

> ・C5,D5の数字をコピーしてsheet1のB4,B5セルに、行列の入れ替えと値で貼り付ける。
> ・sheet1のE48の数字をコピー(E48には関数が入っている)して、
>  sheet2のG5(コピーしたCD列と同じ行のG列)に値で貼り付ける。
> ここまでが一連の動作です。

ここまでをマクロ記録してみてはどうですか?
それを元にして、繰り返し処理に持ち込めば、
マクロにすることができるでしょう。

良い機会です。トライしてみて下さい。
中途までのマクロ記録をアップすれば、
コメントが得られると思います。
・ツリー全体表示

【79294】Re:マクロ、VBAのコード
発言  亀マスター  - 17/7/4(火) 18:52 -

引用なし
パスワード
   VBAは初めてでしょうか?
であれば、入門書や入門サイトで基本的なことから勉強するのをお勧めします。
ある程度進めば、おっしゃる処理はそれほど難しいものではありません。

単にコードの完成品を作って教えて欲しいということであれば、ここの利用規約に
反しますので、自分の力でどこまで作ったのかを提示し、その上でわからない部分に
ついて質問してください。
・ツリー全体表示

【79293】ああ、チェックマーク表示されないのか
発言  Jaka  - 17/7/4(火) 12:04 -

引用なし
パスワード
   >定数を選択して、文字以外の✓をはずしてOKボタン。

ああ、チェックマーク表示されないのか・・・。

✓ は、チェック と置き換えて読んでください。
・ツリー全体表示

【79292】Re:数字になっていないセルの内容を自動...
発言  Jaka  - 17/7/4(火) 11:57 -

引用なし
パスワード
   今更遅いだろうけど。

適当なセルに -1 を入力してコピーしておく。

ホーム → 検索と選択 → ジャンプ → セル選択 で、
定数を選択して、文字以外の✓をはずしてOKボタン。

Ctrl + F で、検索と置き換えダイアログを出す。
検索する文字列「-」で、置換後の文字空白で、すべて置換え。
検索と置き換えダイアログを閉じる。

-1を入力したセルがコピー状態であることを確認。
(余計なことをしなければコピー状態のはず。)

選択されているセルに、形式を選択して貼り付けで、
値と乗算を選択して貼り付け。

By 2007
・ツリー全体表示

【79291】マクロ、VBAのコード
質問  こまいぬ  - 17/7/4(火) 11:01 -

引用なし
パスワード
   Excelに関する質問です。
OSは7、ExcelのVerは2010です。
マクロかVBAに詳しい方、ご教示下さい。

sheet2のC列・D列の5行目から8181行目まで数字が入っています。

C5・D5の数字をコピーしてsheet1のB4・B5セルに、行列の入れ替えと値で貼り付ける。
sheet1のE48の数字をコピー(E48には関数が入っている)して、sheet2のG5(コピーしたCD列と同じ行のG列)に
値で貼り付ける。

ここまでが一連の動作です。

つぎはsheet2のC6・D6をコピーしてsheet1のB4・B5セルに、行列の入れ替えと値で貼り付ける。
sheet1のE48の数字をコピー(E48には関数が入っている)して、sheet2のG6(コピーしたCD列と同じ行のG列)に
値で貼り付ける。

この作業を8181行目まで繰り返したいです。
またsheet2のC・D列のデータは今後増えることがあります。

どの様なコードにすれば良いでしょうか。
回答よろしくお願い致します。
・ツリー全体表示

【79290】Re:Shell 変数使用
発言  Jaka  - 17/7/3(月) 16:29 -

引用なし
パスワード
   たぶん(動作未確認)

変数 = 2
'Shelcode = "rasdial.exe ""TEST" & 変数 & """" & " aaa bb"
Shelcode = "rasdial.exe ""TEST" & 変数 & """ aaa bb"

Ret1 = Shell(Shelcode, vbHide)
・ツリー全体表示

【79289】Shell 変数使用
質問  Ran  - 17/7/3(月) 15:29 -

引用なし
パスワード
   Ret1 = Shell("rasdial.exe ""TEST1"" aaa bbb", vbHide)
TESTの後の数字を変数にしたい。
Ret1 = Shell("rasdial.exe """TEST" & i"" aaa bbb", vbHide)
ではうまくいきません。
よろしくお願いします。
・ツリー全体表示

【79288】Re:xlsmファイルの破損について
発言  γ  - 17/7/2(日) 22:22 -

引用なし
パスワード
   それだけの記述では壊れる理由もわからないだろうし、
どうしたら壊れないかと問われても誰も答えられないと思います。

少なくともコードがないとどうにもならないでしょう。
ただし、コードがあっても必ず解決出来るとも言えません。
(ファイルが壊れるというのは個別の事象であって、
 内部処理に起因することもあり、Excel開発者でないとわからないことも
 ありえるでしょう。)
・ツリー全体表示

【79287】xlsmファイルの破損について
質問  エクセル素人  - 17/7/2(日) 21:12 -

引用なし
パスワード
   vbaで複数のデータを分析しています。

分析するデータごとに、xlsmファイルを分けて作って、
各xlsmファイル内のvbaを実行する、メインのxlsmファイルを作っています。
以下、イメージです。

<ファイル構成>
メイン.xlsm ←メイン.xlsmで分析1.xlsm〜分析3.xlsmを実行
分析1.xlsm
分析2.xlsm
分析3.xlsm

<補足>
補足1.:分析1〜3の各ファイルには、複数のモジュールがある(callなどしています)
補足2.:分析1〜3それぞれの実行結果をそれぞれ別のxlsxファイルに記録している
補足3.:分析1〜3の各ファイルには、vbaのみ記載し、エクセルのデータ記録はしていない

毎日、メイン.xlsmを実行して、日々のデータを記録しているのですが、
ある日突然、エラーでいずれかのxlsmファイルが壊れることがあります(記録用のxlsxファイルは壊れません)。

xlsmファイルで複数のモジュールを実行していることが原因なのかなとも思い、
例えば、エクスポートしたbasファイルを直接実行するといったことは可能なものでしょうか?

もしくは、その他、ファイルが壊れないようにする方法などありましたら、ご教授いただけると幸いです。
・ツリー全体表示

【79286】Re:隣のセルが空白でない場合に値を入力...
発言  マナ  - 17/7/1(土) 9:28 -

引用なし
パスワード
   ▼VBA勉強始めました さん:

>ws.Range("A1").CurrentRegion.Columns(1).Select.Value=1

すべて1ですか? 
こうです。

範囲.Select
Selection.Value = 1

または、1行で

範囲.Value = 1

とします。

Sub test2()
  Dim ws As Worksheet
 
  Set ws = ActiveSheet
 
  ws.Columns(1).Insert
  ws.Range("A1").CurrentRegion.Columns(1).Value = 1
  
End Sub

  
・ツリー全体表示

【79285】Re:隣のセルが空白でない場合に値を入力...
発言  VBA勉強始めました  - 17/7/1(土) 0:33 -

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

いつも親切に教えて頂き、ありがとうございます。
選択したらそのセル範囲に数値の「1」を入力させたいんです。

実は前回教えて頂いたVBAの最後の
ws.Range("A1").CurrentRegion.Columns(1).Select
で数値を入力したいセルの範囲を選んでくれたので

ws.Range("A1").CurrentRegion.Columns(1).Select.Value=1

このように少し手を加えたところ、エラーとなってしまいました。
(すでに帰宅しており、エラー内容などは月曜以降でないとわかりません)


>▼VBA勉強始めました さん:
>
>>数値を入力したいセル範囲を選択することができました!
>
>では、「数値を入力する」がどういう操作なのか教えてください。
>それとも、そこは出来ていますか?
・ツリー全体表示

【79284】Re:フォルダ内パスワード一括設定について
発言  マナ  - 17/6/30(金) 23:05 -

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

>(1)下記コードのうち、Excel版は問題なく動作するのですが、Word版を実行したところ「実行時エラー'424":オブジェクトが必要です」と出てしまいます。修正方法をご教示いただけないでしょうか。(エラー箇所は★の部分)

ごめんなさい。
試しましたが、こちらでは、エラーになりませんのでお役に立てません。

-----

エラーと関係ないのですが、

>    '文末に改行を挿入し削除(何らかの変更がないと上書き保存できない)

これについては、無駄に編集しなくても

ActiveDocument.Saved = False

を追加すれば、保存できます。
試してみてください。

あとWith〜end withを使用して、
こんな感じにすると、コードもすっきりします。

With Documents.Open(FileName:=p & myfn, PasswordDocument:=pwopen)
  .Saved = False
  .Password = pwclose
  .Close True
End With
・ツリー全体表示

【79283】Re:フォルダ内パスワード一括設定について
発言  マナ  - 17/6/30(金) 22:26 -

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

>
>(2)今回のマクロでは当該フォルダのみを動作の対象としていますが、下層フォルダもまとめて一括で動作するように設定はできないものでしょうか。

ここを参考に考えてみてはどうでしょうか。
ht tp://www.moug.net/tech/exvba/0060088.html


(1)については、問題なさそうですが試してみてから。
・ツリー全体表示

【79282】Re:隣のセルが空白でない場合に値を入力...
発言  マナ  - 17/6/30(金) 22:22 -

引用なし
パスワード
   ▼VBA勉強始めました さん:

>数値を入力したいセル範囲を選択することができました!

では、「数値を入力する」がどういう操作なのか教えてください。
それとも、そこは出来ていますか?
・ツリー全体表示

【79281】フォルダ内パスワード一括設定について
質問  VBA  - 17/6/30(金) 14:23 -

引用なし
パスワード
   初めまして、VBA勉強中の者です。

【前提】
フォルダ内にある多数のファイルについてまとめて1つのパスワードを設定したいと考えています。
なお、フォルダ内にパスワードが設定されているファイルとされていないファイルが混在しているため、一旦全てパスワードを解除した後、まとめてパスワードを設定する必要があります。
各所を参考に、2つコードを入力したのですが、以下2点についてご教示いただければ幸いです。
(Excel2010を使用しています。)

【質問内容】
(1)下記コードのうち、Excel版は問題なく動作するのですが、Word版を実行したところ「実行時エラー'424":オブジェクトが必要です」と出てしまいます。修正方法をご教示いただけないでしょうか。(エラー箇所は★の部分)

(2)今回のマクロでは当該フォルダのみを動作の対象としていますが、下層フォルダもまとめて一括で動作するように設定はできないものでしょうか。

【入力コード(※設定したいパスワードが「aaa」の場合】
1.Excel版
Sub パスワードExcel()
  Dim myfolder, myfn, myword, pwopen, pwclose
  Dim pattern
  '操作を選択
  pattern = MsgBox("パスワード解除ならば「はい」、セットならば「いいえ」", vbYesNo)
  If pattern = vbCancel Then
    Exit Sub
  End If
  'パスワードをセット
  myword = "aaa"
  If pattern = vbYes Then
    pwopen = myword
    pwclose = ""
  ElseIf pattern = vbNo Then
    pwopen = ""
    pwclose = myword
  End If
  'フォルダを選択
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "操作したいファイルのあるフォルダを選択"
    .AllowMultiSelect = False
    If .Show = -1 Then
      myfolder = .SelectedItems(1)
    Else
      Exit Sub
    End If
  End With
  'ファイルを操作
  myfn = Dir(myfolder & "\*.xls*", vbNormal)
  Do Until myfn = ""
    Call ファイル開閉(myfolder & "\" & myfn, pwopen, pwclose)
    myfn = Dir
  Loop
End Sub
Function ファイル開閉(myfn, pwopen, pwclose)
  Workbooks.Open Filename:=myfn, passWord:=pwopen
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs Filename:=myfn, passWord:=pwclose, WriteResPassword:=""
  Application.DisplayAlerts = True
  ActiveWorkbook.Close
End Function

2.Word版
Sub パスワードWord()
  'フォルダ内の共通のパスワードがセットされた文書を連続して開き、解除して上書き保存。
  '逆にフォルダ内の文書を連続して開き、共通のパスワードをセットして上書き保存。
  Dim onoff As Long
  Dim mypw, pwopen, pwclose, mypath, myfn As String
  '操作を選択
  onoff = MsgBox("パスワード解除ならば「はい」、セットならば「いいえ」", vbYesNo)
  If onoff = vbCancel Then
    Exit Sub
  End If
  'パスワードをセット
  mypw = "aaa"
  If onoff = vbYes Then
    pwopen = mypw
    pwclose = ""
  ElseIf onoff = vbNo Then
    pwopen = ""
    pwclose = mypw
  Else
    Exit Sub
  End If
  'フォルダの選択
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "フォルダを選択"
    .AllowMultiSelect = False
    If .Show = -1 Then
      mypath = .SelectedItems(1) & "\"
    Else
      Exit Sub
    End If
  End With
  'ファイルの取得と実行
  myfn = Dir(mypath & "*.doc*", vbNormal)
  Do Until myfn = ""
    '開
    ★Documents.Open FileName:=mypath & myfn, PasswordDocument:=pwopen★
    '文末に改行を挿入し削除(何らかの変更がないと上書き保存できない)
    Selection.EndKey Unit:=wdStory
    Selection.TypeParagraph
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.Delete Unit:=wdCharacter, Count:=1
    '上書き保存
    ActiveDocument.SaveAs Filename:=ActiveDocument.FullName, passWord:=pwclose, WritePassword:=""
    ActiveWindow.Close
    myfn = Dir
  Loop
End Sub
・ツリー全体表示

【79280】Re:チェックボックスがONの場合に選択し...
お礼  ペーターパン  - 17/6/30(金) 12:33 -

引用なし
パスワード
   ▼マナ さん:
返信が遅れて申し訳ありません。

業務上、CSVファイルやエクセルファイルの数値チェックを行うことが多いため、個人用にアドインを作りたいと考えていました。
下記、よく読んで自分の至らなかった点を確認してみます。


>▼ペーターパン さん:
>
>試したのは、こんな感じです。
>
>Option Explicit
>
> Dim WithEvents xlApp As Application
> Dim bLine As Range
>
>
>Private Sub Workbook_Open()
>  Set xlApp = Application
>  
> With xlApp.CommandBars("Cell").Controls.Add(before:=1)
>  .Caption = "強調表示OFF"
>  .OnAction = "thisworkbook.メニュ切り替え"
>  ThisWorkbook.Sheets(1).Cells(1).Value = False
> End With
>  
>End Sub
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>
>  If Not bLine Is Nothing Then bLine.Font.Bold = False
>  xlApp.CommandBars("Cell").Controls(1).Delete
>  
>End Sub
>
>Private Sub メニュ切り替え()
>  
>  With ThisWorkbook.Sheets(1).Cells(1)
>    If .Value = False Then
>      xlApp.CommandBars("Cell").Controls(1).Caption = "強調表示ON"
>    Else
>      xlApp.CommandBars("Cell").Controls(1).Caption = "強調表示OFF"
>    End If
>    .Value = Not .Value
>  End With
>   
>End Sub
>
>
>Private Sub xlApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
>
>  If Not bLine Is Nothing Then
>    bLine.Font.Bold = False
>    Set bLine = Nothing
>  End If
>  If ThisWorkbook.Sheets(1).Cells(1).Value Then
>    Selection.EntireRow.Font.Bold = True
>    Set bLine = Selection.EntireRow
>  End If
>  
>End Sub
・ツリー全体表示

【79279】Re:隣のセルが空白でない場合に値を入力...
回答  VBA勉強始めました  - 17/6/28(水) 9:36 -

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

度々返信が遅くなり申し訳ありません。

ご教授頂いたVBAですが
最後の2行のコマンドは初めて見た為
完全には理解できておりませんが
A1のセルを含めてデータが入力されている範囲を選択し
その範囲の中からA列だけを選択しているということでしょうか?

ステップで実行し、ご教授頂いたVBAで
数値を入力したいセル範囲を選択することができました!

>Sub test()
>  Dim ws As Worksheet
>  
>  Set ws = ActiveSheet  ⇒アクティブなシートを選択
>  
>  ws.Columns(1).Insert  ⇒アクティブなシートのA列に挿入
>  ws.Range("A1").Select  ⇒アクティブなシートのA1セルを選択
>  ws.Range("A1").CurrentRegion.Select
>  ws.Range("A1").CurrentRegion.Columns(1).Select
>  
>End Sub

>▼VBA勉強始めました さん:
>
>下記マクロの意味がわかりますか。
>ステップ実行で1行ずつ確認してください。
>数値を入れたいセル範囲を選択できましたか?
>
>Option Explicit
>
>Sub test()
>  Dim ws As Worksheet
>  
>  Set ws = ActiveSheet
>  
>  ws.Columns(1).Insert
>  ws.Range("A1").Select
>  ws.Range("A1").CurrentRegion.Select
>  ws.Range("A1").CurrentRegion.Columns(1).Select
>  
>End Sub
・ツリー全体表示

【79278】Re:WMIを利用したWindowsイベントログの...
お礼  ギケン  - 17/6/27(火) 9:26 -

引用なし
パスワード
   hatena 様

ありがとうございます!

さっそくご教示頂いたとおり記載し、無事思い通りのログ出力されました!

hatena様に頂いたコードを改めて拝見すると、自分では辿り着かなかった(辿り着いたとしても今回の件には間に合わない)と思います。

大変助かりました。

ありがとうございました!
・ツリー全体表示

【79277】Re:WMIを利用したWindowsイベントログの...
回答  hatena  - 17/6/26(月) 22:02 -

引用なし
パスワード
   ▼ギケン さん:
>イベントログの抽出条件(日付指定のみ)を指定したSQLを実行
>Set colEvents = objWMIService.ExecQuery _
>  ("Select * from Win32_NTLogEvent Where TimeWritten >= '" & utcStartDate & "'")

下記のような感じで。(変数宣言は適宜追加してください。)

'UTC日時値に変換するためのオブジェクトを作成
Set utcStartDate = CreateObject("WbemScripting.SWbemDateTime")
Set utcEndDate = CreateObject("WbemScripting.SWbemDateTime")

'開始日、終了日の設定
StartDate = #5/1/2017#
EndDate = #6/1/2017#

'UTC日時に変換
utcStartDate.SetVarDate StartDate, True
utcEndDate.SetVarDate EndDate, True


'中略

Set colEvents = objWMIService.ExecQuery _
  ("Select * from Win32_NTLogEvent Where (EventCode = 12 Or EventCode = 13) And " & _
   "TimeWritten >= '" & utcStartDate & "' AND TimeWritten < '" & utcEndDate & "'")
・ツリー全体表示

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