Excel VBA質問箱 IV

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

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


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

【82109】CSVから読み込んだタブの重複が削除でき...
質問  VBA初心者  - 23/1/11(水) 17:11 -

引用なし
パスワード
   表題の件でどなたかお答えしていただけると大変助かります…

RPAとマクロの組み合わせで使用することを想定していて
RPAでExcelブック>データ>データの取得>テキストまたはCSVから
にて日付けや住所、電話番号等が含まれるCSVを読み込み、

その後マクロで重複を削除したうえでデータの編集をしたいと思うのですが
重複を削除するという段階で躓いている状況です。

Sub 重複削除()
  '表の2列目(=ID列)が重複していたら削除
Worksheets("シート名").Range("A:EY").RemoveDuplicates Columns:=Array(1), Header:=xlYes
End Sub

のように記載をしていて、シート名の部分がCSVから読み取ったものだと
400とだけ書かれているエラーメッセージが表示されますが、
CSVから読み取ったものをコピーして新規シートに貼り付け、
そのうえでシート名を新規シートに変えて実行すると上手くいきます。

データ数が多いとフリーズしてしまうので、可能であればCSVから読み取ったシートそのままで処理したいのですが、何かいい方法はないようでしょうか……。
・ツリー全体表示

【82108】Re:配列でsheetをコントロール
お礼  初心者Q  - 22/12/29(木) 23:00 -

引用なし
パスワード
   どのの知識が不足しているのかおぼろげにわかりました。
ありがとうございました。取り急ぎお礼まで。
・ツリー全体表示

【82107】Re:配列でsheetをコントロール
発言  マナ  - 22/12/25(日) 20:45 -

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

Sub test()
  Dim ws As Worksheet
  Dim r As Range
  
  Set r = Worksheets("sheet1").Range("C6:C9")
 
  For Each ws In Worksheets
    If WorksheetFunction.CountIf(r, ws.Name) > 0 Then
      ws.Visible = True
    End If
  Next

End Sub
・ツリー全体表示

【82106】Re:配列でsheetをコントロール
発言  初心者Q  - 22/12/25(日) 19:05 -

引用なし
パスワード
   補足させていただきます。
bookには、Sheet1,Sheet2,Sheet3,Sheet4というsheetとがあり
Range("C6:C9")には、Sheet2,Sheet3,Sheet4というシート名が入力されています。
VBAはSheet1にて実行します。
(補足になっていないかもしれませんが)
・ツリー全体表示

【82105】配列でsheetをコントロール
質問  初心者Q  - 22/12/25(日) 8:01 -

引用なし
パスワード
   基本が習得できていない所為かと思いますがエラーがでる背景がわかりません。
アドバイスをお願いできないでしょうか。


Sub 一部のsheetを表示する()

  Dim MyArray
   
  MyArray = Range("C6:C9")   'C6:C9に入力されたsheet名を配列に代入
  Worksheets(MyArray).Visible = True 'ここで型が一致しません実行時エラー13とでます。
 
End Sub
・ツリー全体表示

【82104】VBAでシートに保存した数字データの足し...
質問  あんも  - 22/12/19(月) 17:24 -

引用なし
パスワード
   お世話になります。(VisualBasic初心者です)
excelシートにVisualBasicで、数字の入力箇所を4つ、画面に作り、データ入力してシートに書きこんで保存しました。
プロパティで最初の入力エリアだけ間違えてMaxLengthを2にしてしまいました、
本当は1桁です。
見た目は全くわからないのですが、これらを列毎で足し算すると、MaxLength2にしてしまった列だけ、結果がおかしいです。

データの書式をいろいろ(数値とか、書式copyとか,etc)試しましたが、結果は変わらずうまく行きませんでした。

間違えた列だけ、手打ちで入力しなおすと、ちゃんと足し算されます。(セル内の数字の表示位置も少し変わるし)

ただデータ件数が多いのと、打ち直し漏れがあると困るので、なんとかMacroとか関数で修正することはできないでしょうか?

アドバイスお願いします。
・ツリー全体表示

【82103】Re:Excelファイルの特定列をvbsで非表示...
発言  ノエル  - 22/12/6(火) 1:09 -

引用なし
パスワード
   ああ、それとここからコピペすると
左側にタブみたいなのが付加されるので
そのままだとエラーになります。
タブ?を消してくださいな。
・ツリー全体表示

【82102】Re:Excelファイルの特定列をvbsで非表示...
発言  ノエル  - 22/12/6(火) 0:55 -

引用なし
パスワード
   >毎回vbsのコードを新しいExcelファイルにコピペして作動させるより

そのExcelファイルを残しておけば済む話では?
どんな風に処理しているのか解りませんが。
バイバイ。

Set oArgs = WScript.Arguments

If oArgs.Count <> 1 Then
  WScript.Quit
End If

Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(oArgs(0)) Then
  xlFile = oArgs(0)
End If

Set fso = Nothing
Set oArgs = Nothing

if xlFile = "" then WScript.Quit

if right(xlFile,3) = "xls" then
  msgbox "エクセル" & vblf & xlFile
else
  msgbox "エクセル以外"
end if
・ツリー全体表示

【82101】Excelファイルの特定列をvbsで非表示にし...
質問  やんまー  - 22/12/4(日) 17:20 -

引用なし
パスワード
   もしかしたらカテゴリー違いの質問かもしれません。
特定のExcelファイルをvbsにドラックアンドドロップしてそのExcelファイルの特定列を非表示にするvbsを組みたいのですが、vbsについての理解が浅くできません。
毎回vbsのコードを新しいExcelファイルにコピペして作動させるより、vbsの方がよい気がしたためvbsでできないかを模索中です。
条件としては特定列は毎回Excelファイルごとに違うわけではなく一緒です。
例としてA列、F列、Q列、AA列〜AX列までを非表示にしたい
こんな感じです。

カテゴリー違いで申し訳ございませんが、お力を貸していただけないでしょうか、、、よろしくお願いいたします。
・ツリー全体表示

【82100】Re:2つのシートのデータをまとめる作業
お礼  ace  - 22/11/18(金) 14:22 -

引用なし
パスワード
   マナさん、ありがとうございました

求めていたもの、完璧です

私も少しずつ、vbaを勉強していきたいと思います

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

【82099】Re:VBA転記について
発言  マナ  - 22/11/16(水) 20:41 -

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

ht tps://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=195386&rev=0
・ツリー全体表示

【82098】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/16(水) 20:39 -

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

Sub test()
  Dim dic As Object
  Dim 見出Sht As Worksheet, 詳細Sht As Worksheet
  Dim r As Range, w() As String, v
  Dim k As Long
  Dim No As String, idx As Long, s1 As String, s2 As String
 
  Set dic = CreateObject("scripting.dictionary")
  Set 見出Sht = Worksheets("見出")
  Set 詳細Sht = Worksheets("詳細")
 
  Set r = 見出Sht.Columns("D").SpecialCells(xlCellTypeConstants).Resize(, 3)
  ReDim w(1 To r.Rows.Count, 1 To 3)
  v = r.Value
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2) & "_" & v(k, 3)   '証区分_年度_No,
    idx = k
    If Not dic.exists(No) Then dic(No) = idx
  Next
 
  Set r = 詳細Sht.Columns("D").SpecialCells(xlCellTypeConstants).Resize(, 11)
  With r.Offset(, 9999)  '右側の空き領域を作業セルとして使用
    .Value = r.Value
    .Sort .Columns(4)
    v = .Value
    .Clear
  End With

 
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2) & "_" & v(k, 3)   '証区分_年度_No,
    If dic.exists(No) Then
      idx = dic(No)
      s1 = v(k, 10)  '項目
      s2 = v(k, 11)  '結果
      s2 = s1 & "(" & s2 & ")"
      w(idx, 1) = IIf(w(idx, 1) = "", s1, w(idx, 1) & "," & s1)
      w(idx, 2) = IIf(w(idx, 2) = "", s2, w(idx, 2) & "," & s2)
    End If
  Next

  Set r = 見出Sht.Columns("AA:AB")
  r.ClearContents
  r.Resize(UBound(w)).Value = w
  r.AutoFit
  
  Set r = 見出Sht.Columns("A")
  r.Resize(UBound(w)).Formula = "=text(h1,""yy/mm"")&p1"
 
End Sub
・ツリー全体表示

【82097】VBA転記について
質問  超初心者  - 22/11/16(水) 15:36 -

引用なし
パスワード
   VBAはじめたての初心者です。


雛形シートから一覧シートへの転記について質問です。
セルの値が一致したら転記をしたいのですがうまくいきません。

一覧シートのA列の値と雛形シートの"I8"が一致で
一覧シート一致した行へ雛形の各セルの値を転記したいです。
宜しくお願いします。
・ツリー全体表示

【82096】Re:2つのシートのデータをまとめる作業
質問  ace  - 22/11/14(月) 10:46 -

引用なし
パスワード
   マナ さん、分かりづらくて申し訳ありません

(見出Sheet)                                                    
A列  B列    C列   D列  E列    F列    H列     P列        
    依頼者No. 現場No. 証区分 年度   No.    日付     依頼者+現場名        
    12345   1   A   2022   6789   2022/11/1  A(株)手前        
    12345   2   A   2022   6790   2022/11/1  A(株)中間       
    12345   3   A   2022   6791   2022/11/1  A(株)出口        
    23456   1   A   2022   6792   2022/11/2  B(株)玄関        
    34567   1   A   2022   6793   2022/11/2  B(株)勝手口        
    45678   1   B   2022   6789   2022/11/1  C(株)入口        
    45678   2   B   2022   6790   2022/11/1  C(株)出口        
    56789   1   C   2022   6789   2022/11/1  B(株)天井        
                                    
(詳細Sheet)                                                                
   A列  B列     C列     D列    E列    F列    G列    M列    N列    
     依頼者No.   現場No.  証区分  年度    No.    SEQ    項目    結果    
     12345     1     A    2022    6789    1    あ    A    
     12345     1     A    2022    6789    2    い    B    
     12345     1     A    2022    6789    3    う    R    
     12345     1     A    2022    6789    4    え    W    
     12345     2     A    2022    6790    1    た    C    
     12345     2     A    2022    6790    2    ち    D    
     12345     3     A    2022    6791    1    つ    F    
     23456     1     A    2022    6792    1    あ    G    
     34567     1     A    2022    6793    1    あ    S    
     45678     1     B    2022    6789    1    か    Z    
     45678     2     B    2022    6790    1    き    P    
     45678     2     B    2022    6790    2    く    Q    
     56789     1     C    2022    6789    1    お    E    
                                    
(見出Sheet)最終表示                                                            
A列          B列   C列     D列     E列    F列    H列    P列       AA列        AB列
          依頼者No. 現場No. 証区分  年度    No.    日付     依頼者+現場名   項目      項目+結果
22/11 A(株)手前   12345  1    A    2022    6789   2022/11/1   A(株)手前    あ , い , う , え  あ(A),い(B),う(R),え(W)
22/11 A(株)中間   12345  2    A    2022    6790   2022/11/1   A(株)中間    た , ち   た(C),ち(D)
22/11 A(株)出口   12345  3    A    2022    6791   2022/11/1   A(株)出口     つ      つ(F)
22/11 B(株)玄関   23456  1    A    2022    6792   2022/11/2   B(株)玄関    あ     あ(G)
22/11 B(株)勝手口  34567  1    A    2022    6793   2022/11/2   B(株)勝手口   あ     あ(S)
22/11 C(株)入口   45678  1    B    2022    6789   2022/11/1   C(株)入口    か     か(Z)
22/11 C(株)出口   45678  2    B    2022    6790   2022/11/1   C(株)出口    き , く   き(P),く(Q)
22/11 B(株)天井   56789  1    C    2022    6789   2022/11/1   B(株)天井    お     お(E)
                                    
1.(見出Sheet)と(詳細Sheet)の共通点は「年度」-「証区分」-「No.」-「現場No.」なので並べ替えをします((詳細Sheet)は「SEQ」も加えます)                                    
上記が同じ場合、「SEQ」の1から順に「あ , い , う , え」と「項目カンマ項目・・」のように加えていく感じです                                    
                                    
加えて(見出Sheet)A列にH列:日付+P列:依頼者+現場名を入力する(日付はYY/MMのみ)                                    
                                    
前回、証区分を加えた分類が出来ていなかった(お願いしていなかった)為、                                    
Aの2022の6789の現場1とB2022の6789の現場1とCの2022の現場1が一緒のものと判断されてしまいました                                    
例「あ , い , う , え , か , お」・・・×                                    
   ↓                                    
 「あ , い , う , え」・・・〇                                    
 「か」・・・〇                                    
 「お」・・・〇
・ツリー全体表示

【82094】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/11(金) 19:23 -

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

サンプルデータを使って説明してください。
・ツリー全体表示

【82093】Re:2つのシートのデータをまとめる作業
質問  ace  - 22/11/11(金) 16:55 -

引用なし
パスワード
   マナ様、ありがとうございました
うまく行きました

わがままついでに、もう少しお付き合いください

Q1
(データ内容)
両シートD列に証区分があり、ここにA,B,C,D,E,F,G,Hと文字が入っています


年度+No+(SEQ)だけで判断すると、

D列のAのNOが1のものと、D列のBのNOが1のもの、D列のCのNOが1が同じものと判断されてしまう不具合が発生していまいました

これを解決するには年度+証区分+No+(SEQ)にしたいのですが
どうしたよいででしょうか?

Q2
G列の日付、例えば2022/11/11が入力されているのですが、見出シートのA列に「22/11-(P列の文字列)」を作成したいのですが、教えて頂けないでしょうか

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

【82092】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/9(水) 18:56 -

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

>v = r.Value
>v = WorksheetFunction.Sort(v, 3, 1, False) 'G列(SEQ)でソート
  ↓
With r.Offset(, 9999)  '右側の空き領域を作業セルとして使用
  .Value = r.Value
  .Sort .Columns(3)
  v = .Value
  .Clear
End With



・ツリー全体表示

【82091】Re:2つのシートのデータをまとめる作業
質問  ace  - 22/11/9(水) 14:03 -

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

私の会社のPCが古くて、Excel2007-2016でして、この関数が使用できないようです

v = WorksheetFunction.Sort(v, 3, 1, False) 'G列(SEQ)でソート

Worksheets(“詳細”).sort.sortfields.add key:=range(…..
   Sorting:=xlsortonvalues, Oder:=xlAscending,dataoption:=xlsortnormal
みたいな感じじゃ無いとダメそうです


ご面倒、お掛けしますが古いExcelでも使用可能な関数を
どのように組み込めばよいか、教えて頂きたいです
・ツリー全体表示

【82090】倍率の変更を無効にしたい
質問  いちの  - 22/11/8(火) 18:58 -

引用なし
パスワード
   表示倍率の変更ができないようにするにはどのようにすればいいでしょうか。

例えば、
ファイルを開いた時点で倍率200倍で表示させて、
そのあとどのような操作でも倍率を変更できないようにしたいです。
スクロールは使います。
・ツリー全体表示

【82089】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/8(火) 18:55 -

引用なし
パスワード
   ▼ace さん:
>
Option Explicit

Sub test()
  Dim dic As Object
  Dim 見出Sht As Worksheet, 詳細Sht As Worksheet
  Dim r As Range, w() As String, v
  Dim k As Long
  Dim No As String, idx As Long, s1 As String, s2 As String
  
  Set dic = CreateObject("scripting.dictionary")
  Set 見出Sht = Worksheets("見出")
  Set 詳細Sht = Worksheets("詳細")
  
  Set r = 見出Sht.Columns("E").SpecialCells(xlCellTypeConstants).Resize(, 2)
  ReDim w(1 To r.Rows.Count, 1 To 2)
  v = r.Value
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2)  '年度_No,
    idx = k
    If Not dic.exists(No) Then dic(No) = idx
  Next
  
  Set r = 詳細Sht.Columns("E").SpecialCells(xlCellTypeConstants).Resize(, 10)
  v = r.Value
  v = WorksheetFunction.Sort(v, 3, 1, False) 'G列(SEQ)でソート
  
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2)  '年度_No,
    If dic.exists(No) Then
      idx = dic(No)
      s1 = v(k, 9)  '項目
      s2 = v(k, 10)  '結果
      s2 = s1 & "(" & s2 & ")"
      w(idx, 1) = IIf(w(idx, 1) = "", s1, w(idx, 1) & "," & s1)
      w(idx, 2) = IIf(w(idx, 2) = "", s2, w(idx, 2) & "," & s2)
    End If
  Next

  Set r = 見出Sht.Columns("AA:AB")
  r.ClearContents
  r.Resize(UBound(w)).Value = w
  r.AutoFit
  
End Sub
・ツリー全体表示

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