Excel VBA質問箱 IV

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

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


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

【82292】Re:CSV出力について
発言  マナ  - 24/5/22(水) 20:30 -

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

Sub test()
  Open "D:\test.csv" For Output As #1
  Print #1, Range("A1").Value & "," & Range("A2").Value
  Print #1, Range("C3").Value & "," & Range("C5").Value
  Close #1
End Sub
・ツリー全体表示

【82291】CSV出力について
質問  てんてん  - 24/5/22(水) 16:08 -

引用なし
パスワード
   例えば
A1 に AAA  A2 に BBB
C3 に CCC  C5 に DDD

といったエクセルの表を、CSVに2行出力するVBAのコードを教えてもたうと助かります。
よろしくお願いいたします。
・ツリー全体表示

【82290】Re:A-Z列は転記されるが、AB列以降の取得...
発言  マナ  - 24/5/22(水) 13:58 -

引用なし
パスワード
   ▼VBA初学者です_T さん:

> CSVファイルのデータをエクセルに落とし、

これは、どのような操作ですか。
・ツリー全体表示

【82289】Re:A-Z列は転記されるが、AB列以降の取得...
質問  VBA初学者です_T  - 24/5/21(火) 15:57 -

引用なし
パスワード
   ▼マナ 様: 
>▼VBA初学者です_T さん:
>
>
>>抽出された横列がA-Zまでは抽出できていますが、AB列以降が抽出できない状況です。
>
>
>問題なのでは、どちらですか?
>1)CSVデータのTempシートへの読み込み
>2)Tempシートからの転記
>
>ステップ実行で、どの行で想定外の挙動となるのか確認してください。

マナ様
書き込みありがとうございます!
ステップインでの確認、初めて行いました。

一行ずつ、確認した結果、
>1)CSVデータのTempシートへの読み込み が問題でした。

どのような規則で並んだのか直ぐに理解できない状況ですが、
A列にほとんどの文字列が羅列されておりました。

なるほど!と思い、CSVファイルのデータをエクセルに落とし、
別のモジュールを記載して、ブック内でデータの読み込みと同条件の転記を実行したところ、
全ての列の情報が転記できました。

CSVの読み込み指示が誤っていると言う事でしょうか。

何度もお応え頂き恐縮ですが、ご教授お願い致します。
・ツリー全体表示

【82288】Re:A-Z列は転記されるが、AB列以降の取得...
発言  マナ  - 24/5/21(火) 13:49 -

引用なし
パスワード
   ▼VBA初学者です_T さん:


>抽出された横列がA-Zまでは抽出できていますが、AB列以降が抽出できない状況です。


問題なのでは、どちらですか?
1)CSVデータのTempシートへの読み込み
2)Tempシートからの転記

ステップ実行で、どの行で想定外の挙動となるのか確認してください。
・ツリー全体表示

【82287】A-Z列は転記されるが、AB列以降の取得が...
質問  VBA初学者です_T  - 24/5/20(月) 13:57 -

引用なし
パスワード
   VBA初学者です。

CSVを読み込み、C列の中でフィルターをかけ、フィルターで抽出された行、且つ、指定の列を転記したいと思っています。
書籍を2冊読み、YouTubeなどで学び、chat GPTやcopilotなどで何とか、VBAを実行したいとトライしておりますが、うまくいきません。

c列の中でのフィルターは抽出できました。
抽出された横列がA-Zまでは抽出できていますが、AB列以降が抽出できない状況です。
列の抽出のコードの書き方が間違っているのでしょうか。

どなたかご教授ください。
宜しくお願い致します。


Sub C列でフィルター且つ列番号でデータ取得CSV()
  Dim ws As Worksheet
  Dim wsNew As Worksheet
  Dim csvFile As String
  Dim lastRow As Long
  Dim i As Long
  Dim newRow As Long
  Dim today As String
  Dim cValue As String
  Dim filterValues As Variant
  Dim columnsToCopy As Variant
  Dim colIndex As Long
  Dim copyColumn As Long
  
    ' フィルター対象の値を設定
  filterValues = Array("5", "11", "82", "402", "413", "421", "579", "580", "620")
  
    ' 転記する列を設定
  columnsToCopy = Array(1, 3, 4, 8, 21, 37, 56, 45, 48, 58, 62, 68, 70, 71, 73, 76, 84, 87, 20, 53)

  ' 今日の日付を取得してフォーマット
  today = Format(Date, "yyyymmdd")

  ' CSVファイルのパスを指定
  csvFile = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")
  If csvFile = "False" Then Exit Sub ' ユーザーがキャンセルした場合

  ' 新しいワークシートを作成
  Set wsNew = ThisWorkbook.Sheets.Add
  wsNew.Name = "臨時進捗表_" & today

  ' CSVファイルを読み込むための一時的なワークシートを作成
  Set ws = ThisWorkbook.Sheets.Add
  ws.Name = "TempCSVData"

  ' CSVファイルを読み込み
  With ws.QueryTables.Add(Connection:="TEXT;" & csvFile, Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) ' 必要に応じて列数を変更
    .Refresh BackgroundQuery:=False
  End With

  ' データの最終行を取得
  lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

  ' ヘッダーのコピー
  For i = LBound(columnsToCopy) To UBound(columnsToCopy)
    wsNew.Cells(1, i + 1).Value = ws.Cells(1, columnsToCopy(i)).Value
  Next i

  newRow = 2

  ' C列に指定された文字列が含まれる行を検索して指定の列を転記
  For i = 2 To lastRow ' ヘッダー行を飛ばして2行目から開始
    cValue = ws.Cells(i, 3).Value
    If Not IsError(Application.Match(cValue, filterValues, 0)) Then
      For colIndex = LBound(columnsToCopy) To UBound(columnsToCopy)
        copyColumn = columnsToCopy(colIndex)
        wsNew.Cells(newRow, colIndex + 1).Value = ws.Cells(i, copyColumn).Value
      Next colIndex
      newRow = newRow + 1
    End If
  Next i

  ' 一時的なワークシートを削除
  Application.DisplayAlerts = False
  ws.Delete
  Application.DisplayAlerts = True

  MsgBox "列番号でのデータ抽出が完了しました!", vbInformation
End Sub
・ツリー全体表示

【82286】Re:検索できるドロップダウン
お礼  名無し  - 24/5/10(金) 12:13 -

引用なし
パスワード
   ▼マナ 様:
レスありがとうございます。
無事動かすことができました。
大変助かりました。
・ツリー全体表示

【82285】Re:検索できるドロップダウン
発言  マナ  - 24/5/9(木) 22:15 -

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

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range, c As Range
  Dim w, v
  
  Set r = Intersect(Target, Columns(3))
  If r Is Nothing Then Exit Sub
 
  With Worksheets("従業員名簿")
    w = Application.Transpose(.Range("C2", .Cells(Rows.Count, 3).End(xlUp)))
  End With
  
  r.Validation.Delete
 
  For Each c In r
    If c.Row > 2 Then
      If c.Value <> "" Then
        v = Filter(w, c.Value)
        Application.EnableEvents = False
        If UBound(v) = -1 Then
          c.ClearContents
        ElseIf UBound(v) = 0 Then
          c.Value = v
        Else
          c.Validation.Add Type:=xlValidateList, Formula1:=Join(v, ",")
        End If
        Application.EnableEvents = True
      End If
    End If
  Next

End Sub
・ツリー全体表示

【82284】表示列の中央揃えについて
質問  たけ  - 24/5/9(木) 22:02 -

引用なし
パスワード
   A列からJ列中で、チェックボックスとコマンドボタンで表示非表示列を切り替えています。
そこでA〜J列の見出しを「生産作業型式」としたいのですが、チェックボックスで表示にしている列の10行目セルを結合するコードを作りたいです。
例えばB,D,E,G,I列が表示されている場合それぞれの列の10行目を結合してこの中に
「生産作業型式」の文字を中央揃えで表示、チェックボックスで別の列が指定されれば一度中央揃えを戻して再度表示された列の10行目を中央揃えで表示するコードになります。よろしくお願いします。
・ツリー全体表示

【82283】検索できるドロップダウン
質問  名無し  - 24/5/9(木) 7:37 -

引用なし
パスワード
   VBA初心者です。

★youtube.com/watch?v=urNR55Ly5gE&si=BsLig7iB2QudvSqk (★→https://)
こちらの動画を参考に、検索できるドロップダウンリストを1つのセルに作成しました。
(例:セルに「佐藤」と入力すると佐藤太郎と佐藤花子がリストに表示される)
このドロップダウンリストを列全てに設定したいのですが、どのようにしたら良いかわからず、ご教示いただけますと幸いです。

前提
・会社のPCに入ってるExcelが2019のため、FILTER関数などは使用できません
・入力シートのC列にドロップダウンで従業員氏名を入力したいです(下記ではC3セルに適用してますが、C列全てに検索できるドロップダウンを適用したいです)
・従業員名簿シートC列に従業員氏名(フルネーム・漢字)が羅列されています
・従業員氏名は今後追加・削除などを行う予定がありますが、参照を列にしているため問題ないと思われます
・従業員名簿シートJ列(空白列)に検索結果を表示させています
・参考動画ではかな、カナでも検索できるようにしてますが、漢字のみで検索できれば十分です
・また、or・and検索も不要です

・入力シートC3セルにデータの入力規則を設定(リスト)
 =OFFSET(従業員名簿!$J$2,0,0,4)
 ※同姓者が2・3名なので仮で4行表示としてます


___以下、コード_____

Private Sub Worksheet_Change(ByVal Target As Range)

  'C3セルではないので終了
  If Target.Address <> "$C$3"
    Exit Sub
  End If

  '候補を作成
  Call 候補を作成

  '入力された値が候補と一致する場合は、選択されたので終了
  If Worksheets(“入力シート”).Range("C3").Value = Worksheets(“従業員名簿”). Range("J2").Value And _
    Worksheets(“入力シート”).Range("C3").Value <> "" And _
    Worksheets(“従業員名簿”).Range("J3").Value = "" Then
    Exit Sub
  End If

  'プルダウン表示
  Worksheets(“入力シート”). Range("C3").Select
  If Worksheets(“入力シート”). Range("C3").Value <> "" Then
    SendKeys "%{DOWN}"
  End If

End Sub


Public Sub 候補を作成()

  Dim 元の行 As Long
  Dim 先の行 As Long
  Dim 検索文字 As String
  
  
  '現在のプルダウン候補の列をクリア
  Worksheets(“従業員名簿”).Range("J:J").ClearContents
  
  元の行 = 2
  先の行 = 2
  検索文字 = Worksheets(“入力シート”). Range("C3").Value
  
  '大元のデータ終了までループ
  Do Until Worksheets(“従業員名簿”). Cells(元の行, 3).Value = ""
    
    If InStr(Worksheets(“従業員名簿”).Cells(元の行,3).Value,検索文字)>0 Or_
    検索文字 = “” Then
      '該当あり
      Worksheets(“従業員名簿”). Cells(先の行, 10).Value = Worksheets(“従業員名簿”). Cells(元の行, 3).Value
      先の行 = 先の行 + 1
    End If
    
    元の行 = 元の行 + 1
  
  Loop

End Sub
・ツリー全体表示

【82282】Re:シートの中から必要なセルを複数取り...
質問  かずこ  - 24/5/1(水) 14:38 -

引用なし
パスワード
   ▼マナ さん:
>▼かずこ さん:
>
>どんな並び替えなのか全くわかりません。
>とりあえず、たたき台として。
>
>Sub test()
>  Dim srtl As Object
>  Dim c As Range, k As String
>  Dim i As Long, r As Range, n As Long
>  
>  Set srtl = CreateObject("system.collections.sortedlist")
>  
>  For Each c In Columns(1).SpecialCells(xlCellTypeConstants)
>    If c.Value Like "?##-##-#" Then
>      k = c.Value
>      Set srtl(k) = c
>    Else
>      Set srtl(k) = Union(srtl(k), c)
>    End If
>  Next
>  
>  Worksheets.Add
>  For i = 0 To srtl.Count - 1
>    Set r = srtl.getbyindex(i)
>    If r.Count > 1 Then
>      Cells(1).Offset(n).Resize(r.Count).Value = r.Value
>      n = n + r.Count
>    End If
>  Next
>    
>End Sub

ご返信ありがとうございます。
長期間返信を失念していました。

上記のコードを実行したのですが、希望に近い動作ができました。

追加の質問なのですが、上記のコードを全列対象にできますでしょうか?

また?##-##-#の下が空白セルの場合、?##-##-#があるセルをクリアするコードも併せてお願いできますでしょうか。

お手数をおかけしますがよろしくお願いいたします。
・ツリー全体表示

【82281】Selenium Basic VBA でファイルダウンロ...
質問  fujifuji E-MAIL  - 24/4/2(火) 17:48 -

引用なし
パスワード
   elenium Basic VBAの初心者です。
chromeのプロファイルを指定したら
ファイルのダウンロード先が変更できないのですが
なにかいい方法はございますか


Dim driver As New Selenium.WebDriver
Dim myBy As New By
Dim siteURL As String
Dim elm As Selenium.WebElement
Dim sKey As New Selenium.Keys
・ツリー全体表示

【82280】Re:ダブルコーテーション以外の空白は代...
発言  JK  - 24/3/25(月) 23:33 -

引用なし
パスワード
   ??

Range("A3").Value = Empty
・ツリー全体表示

【82279】Re:ダブルコーテーション以外の空白は代...
お礼  shun  - 24/3/11(月) 13:57 -

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

Find("*", , xlFormulas).Row


なるほどです。

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

【82278】Re:ダブルコーテーション以外の空白は代...
発言  マナ  - 24/3/7(木) 19:33 -

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

>""を埋めたセルは0の空文字列なのでCTRL+矢印での空白検索の対象外になります。

Sub test()
  Worksheets.Add
  Range("A3").Value = ""
  Range("A4").Formula = "="""""
  Range("A5").Value = "a5"

  Range("A1").End(xlDown).Select

  MsgBox Columns("A").Find("*", , xlFormulas).Row
  MsgBox Columns("A").Find("*", , xlValues).Row
End Sub
・ツリー全体表示

【82277】ダブルコーテーション以外の空白は代入で...
質問  shun  - 24/3/7(木) 17:21 -

引用なし
パスワード
   IFERROR(Vlookup(A1,シート!A:A,1,0),"")などで、エラーに空白を埋めます。
""を埋めたセルは0の空文字列なのでCTRL+矢印での空白検索の対象外になります。
VBAではEnd(xlDown).Rowなどが正しく動かず、行列数が把握ができません。
accessのようにnullのような空白は埋められますでしょうか。
IFERROR(Vlookup(A1,シート!A:A,1,0),null)的な。
よろしくお願いします。
・ツリー全体表示

【82276】シートの保護
質問  ちるちる  - 24/3/5(火) 10:12 -

引用なし
パスワード
   VBA初心者です。詳しい方ご教授願います。

社員全員(20名)の日報を一つのブックで管理したいため、各シートにクローズボタンを押すと表が非表示になり、オープンボタンを押すとパスワードを入力するボックスが表示され、入力後表が再表示されるように設定したいです。

作成したのは以下のとおりです。
クローズボタンを押すと表が非表示になり、シートの保護を行う。

オープンボタンを押すとパスワード入力ボックスを表示し、表が再表示されるようにしたいです。
よろしくお願いします。


Sub ボタン3_Click()

End Sub
Sub クローズ()
'
' クローズ Macro
'

'
  Columns("A:K").Select
  Selection.EntireColumn.Hidden = True
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub


Sub Macro9()
'
' Macro9 Macro
'

'
  ActiveSheet.Unprotect
  Selection.EntireColumn.Hidden = False
End Sub
・ツリー全体表示

【82274】Re:文字列から計算する数式について
発言  マナ  - 24/2/22(木) 22:41 -

引用なし
パスワード
   ▼もっちゃん さん:

考え方だけ。
想定される全パターンの置換を追加してください。

Function conv_cm3(f As String) As Double
  f = Replace(f, "mm", "*0.1^3")
  f = Replace(f, "inches", "*2.54^3")
  f = Replace(f, "x", "*")
   conv_cm3 = Evaluate(f)
End Function
・ツリー全体表示

【82273】文字列から計算する数式について
質問  もっちゃん E-MAIL  - 24/2/21(水) 16:30 -

引用なし
パスワード
   VBAに初めて手を出そうとしています。
この様な動作をさせたいと考えていますが可能でしょうか?

コピーされた文字列をセルに貼り付けてcm3に変換して計算

330 * 250 * 24mm

を入力すると隣のセルに1980cm3と表示したいのです。

また違うセルでも構わないのですが同様に

9.84 x 1.97 x 0.79 inches

と貼り付けした場合にも計算して隣のセルに答えをcm3で表示させたいのです。
VBAを使わなくても可能な方法があるのならそれもOKです。
よろしくお願い致します。
・ツリー全体表示

【82272】やっぱ変わってなかった
発言  Jaka  - 24/2/11(日) 19:22 -

引用なし
パスワード
   なんか変わってなかったみたい残念
・ツリー全体表示

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