Excel VBA質問箱 IV

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

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


5 / 3837 ページ ←次へ | 前へ→

【82325】VBAの中でセル範囲を任意に設定する
質問  まっちゃん  - 24/6/25(火) 12:00 -

引用なし
パスワード
   「選択した範囲をセル内で中央」の機能をマクロで記録すると、マクロ内で2つのセルを選択すると当然のことながらそれ以上のセルを選択した場合、正しく実行できません。任意のセルを選択して実行できるようにするためには、以下の記述をどのように変えれば良いでしょうか?ご教示ください。

Sub 選択範囲内で中央()
'
' 選択範囲内で中央 Macro
'

'
  ActiveCell.Range("A1:B1").Select
  With Selection
    .HorizontalAlignment = xlCenterAcrossSelection
    .VerticalAlignment = xlCenter
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = False
  End With
End Sub
・ツリー全体表示

【82324】エラー原因のご教示をお願いいたします
質問  かずこ  - 24/6/25(火) 11:21 -

引用なし
パスワード
   前回と似たような質問で申し訳ないです。

B列からF列までのデータをA列のデータの下に順番にCUTとPASTEを繰り返したいです。

下記の★の部分で、それぞれの基準の列(A,G,M列...)の最終行を下から取得しているつもりなのですが、エラーが出ます。

よろしければエラーの原因を教えていただけないでしょうか。

また、上記を5回繰り返した後、G列で再び繰り返す記述もあわせて教えていただけないでしょうか。

支離滅裂なコードで申し訳ございませんが、よろしくお願いいたします。


maxcol = Worksheets(1).Range("A1").CurrentRegion.Columns.Count


For n = 2 To maxcol 

For m = 1 To 5


★lastRow = Cells(30, n - m).End(xlUp).Row

ws.Cells(1, n).Resize(18).Cut ws.Cells(lastRow + 2, n - m)


Next m

Next n
・ツリー全体表示

【82323】Re:隣のセルの値と比較して並べ替える
お礼  かずこ  - 24/6/24(月) 10:19 -

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


ご指摘通り修正してみたところ、うまく動作しました。

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

【82322】Re:隣のセルの値と比較して並べ替える
発言  マナ  - 24/6/21(金) 18:45 -

引用なし
パスワード
   ▼かずこ さん:

> ws.Cells(1, j).Resize(12).Cut
> ws.Cells(7, j - 1).PasteSpecial

 ↓ 1行にまとめる

ws.Cells(1, j).Resize(12).Cut ws.Cells(7, j - 1)
・ツリー全体表示

【82321】Re:隣のセルの値と比較して並べ替える
質問  かずこ  - 24/6/21(金) 16:15 -

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

申し訳ないです、列と行が逆になっていました。


教えていただいたコードの

ws.Cells(7, j - 1).PasteSpecialの部分で、

"rangeクラスの pastespecialメソッドが失敗しました"というエラーが出ます。

maxcol = ws.Range("A1").CurrentRegion.Columns.Count

の前に下記のコードがあるのですがこれが影響している可能性はありますか?

よろしくお願いいたします。


worksheets(1).Range("A1").PasteSpecial Transpose:=True
・ツリー全体表示

【82320】Re:隣のセルの値と比較して並べ替える
発言  マナ  - 24/6/20(木) 18:48 -

引用なし
パスワード
   ▼かずこ さん:

Cells(行番号, 列番号) です。


Dim ws As Worksheet
Set ws = Worksheets(1)

maxcol = ws.Range("A1").CurrentRegion.Columns.Count

For j = maxcol To 2 Step -1
  If Left(ws.Cells(1, j), 6) = Left(ws.Cells(1, j - 1), 6) Then
    ws.Cells(1, j).Resize(12).Cut
    ws.Cells(7, j - 1).PasteSpecial
  End If
Next
・ツリー全体表示

【82319】Re:隣のセルの値と比較して並べ替える
質問  かずこ  - 24/6/20(木) 18:11 -

引用なし
パスワード
   すみません、今改めて動かしてみたところ★印ではエラーが出ませんでしたがcutとpasteができておりませんでした。
何か改善点があれば教えていただけますでしょうか。
よろしくお願いいたします。
・ツリー全体表示

【82318】Re:隣のセルの値と比較して並べ替える
質問  かずこ  - 24/6/20(木) 17:56 -

引用なし
パスワード
   ご返信ありがとうございます。
別の質問と被る部分があるのですが、
下記の★部分でエラーが出てつまずいております。
改善点があればご教示お願いいたします。

maxcol = Worksheets(1).Range("A1").CurrentRegion.Columns.Count

For j = maxcol To 1

If Left(Worksheets(1).Cells(j & "1"), 6) = Left(Worksheets(1).Cells(j - 1 & "1"), 6) Then

Range(Cells(j - 1 & "1"), Cells(j - 1 & "6")).Cut

★Worksheets(1).Cells(j - 1 & "7").Paste

End If

Next j
・ツリー全体表示

【82317】Re:隣のセルの値と比較して並べ替える
発言  マナ  - 24/6/20(木) 16:25 -

引用なし
パスワード
   ▼かずこ さん:

右端から順に、文字列比較、切り取り、貼り付け を繰り返してください。
・ツリー全体表示

【82316】隣のセルの値と比較して並べ替える
質問  かずこ  - 24/6/20(木) 15:08 -

引用なし
パスワード
    A         B        C        D                      

1 919-03-1     A12-02-2     A12-02-1    A21-03-2     

2 pus       pus       pus       pus               

3 HOYU7411051   SEGU2455712   TEMU3908770   DJLU2014375 

4 20 3.7     20 22.62    20  22.64   20 14.74  

5 TNK (E)                        

6 6.1/2927             6.1/2588


上記のExcelシートを1行目の???-??-?をもとに並び替えたいと考えています。
(列数はその時々で変動します)

右端から左に向かって一つずつ比較し、比較元のセルの左6文字が比較先のセル左6文字と同じ場合、???-??-?のセル+その下のセル5つを比較先の???-??-?のセル+その下のセル5つの下に移動させたいと考えています。

※左6文字が同じセルが連続するのは最大3回までありますので、重ねたデータをさらに動かすことがあります。

説明がわかりづらかったら申し訳ありません

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

【82315】Re:vba初心者です。間違い箇所を教えてい...
質問  かずこ  - 24/6/20(木) 10:56 -

引用なし
パスワード
   rangeをcellsに変えてみたところエラー解決できました。

お力添えいただきありがとうございます。
・ツリー全体表示

【82314】Re:vba初心者です。間違い箇所を教えてい...
発言  マナ  - 24/6/19(水) 12:04 -

引用なし
パスワード
   ▼かずこ さん:

>Range(j & "1")

Cells(行番号, 列番号) を使う方がわかりやすいのでは?
・ツリー全体表示

【82313】vba初心者です。間違い箇所を教えていた...
質問  かずこ  - 24/6/19(水) 11:01 -

引用なし
パスワード
   下記は現在作成中のコードの一部なのですが★印の部分で、"実行時エラー '1004'

アプリケーション定義またはオブジェクト定義のエラーです。"が出ます。

エラー原因がわかる方がいらっしゃいましたらご指摘をお願いいたします。


maxcol = Worksheets(1).Range("A1").CurrentRegion.Columns.Count

For j = 1 To maxcol

★If Left(Worksheets(1).Range(j & "1"), 6) = Left(Worksheets(1).Range(j + 1 & "1").Value, 6) Then★

Worksheets(1).Range(j + 1 & "1", j + 1 & "6").Cut

Worksheets(1).Range(j & "7").Paste

End If

Next j
・ツリー全体表示

【82312】目安箱は、ここから見れた
発言  Jaka  - 24/6/17(月) 2:27 -

引用なし
パスワード
   目安箱

ht tp://www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=tre;id=FAQ
・ツリー全体表示

【82311】Re:日付けが検索されない
発言  マナ  - 24/6/15(土) 15:21 -

引用なし
パスワード
   Sub test()
  Dim ws応募 As Worksheet
  Dim ws集計 As Worksheet
  Dim dic As Object, k
  Dim c As Range, ym As String
  
  Set dic = CreateObject("scripting.dictionary")
 Set ws応募 = Worksheets("応募")
  Set ws集計 = Worksheets("集計")
  
  
  For Each c In ws応募.Range("AX2", ws応募.Cells(Rows.Count, "Ax").End(xlUp))
    If c.Value Like "*インスタ*" Then
      With c.Offset(, 7)
        If IsDate(.Value) Then ym = Format(.Value, "yyyymm")
        dic(ym) = dic(ym) + 20000
      End With
    End If
  Next
  
  For Each k In dic.keys
    If k = "202404" Then ws集計.Range("A5").Value = dic(k)
    If k = "202405" Then ws集計.Range("A6").Value = dic(k)
  Next
  
End Sub
・ツリー全体表示

【82310】日付けが検索されない
質問  せい E-MAIL  - 24/6/15(土) 6:45 -

引用なし
パスワード
   Sub CalculateAndSetValue()
  Dim ws応募 As Worksheet
  Dim ws集計 As Worksheet
  Dim lastRow As Long
  Dim countインスタ4月 As Long
  Dim countインスタ5月 As Long
  Dim i As Long
  Dim axValue As String
  Dim beValue As Variant
  Dim beDate As Date
  
  ' シートを指定
  Set ws応募 = Worksheets("応募")
  Set ws集計 = Worksheets("集計")
  
  ' 最終行を取得(ここではAX列の最終行を取得します)
  lastRow = ws応募.Cells(ws応募.Rows.Count, "AX").End(xlUp).Row
  
  ' 件数の初期化
  countインスタ4月 = 0
  countインスタ5月 = 0
  
  ' 件数をカウント
  For i = 2 To lastRow ' 1行目はヘッダー行として2行目からループ開始
    axValue = ws応募.Cells(i, "AX").Value
    beValue = ws応募.Cells(i, "BE").Value
    
    ' 日付の取得とフォーマット
    On Error Resume Next
    beDate = DateValue(beValue)
    On Error GoTo 0
    
    ' 2024年4月の場合
    If Year(beDate) = 2024 And Month(beDate) = 4 Then
      If InStr(axValue, "インスタ") > 0 Then
        countインスタ4月 = countインスタ4月 + 1
      End If
    End If
    
    ' 2024年5月の場合
    If Year(beDate) = 2024 And Month(beDate) = 5 Then
      If InStr(axValue, "インスタ") > 0 Then
        countインスタ5月 = countインスタ5月 + 1
      End If
    End If
  Next i
  
  ' 件数に20000を掛けた値をシート集計のA5およびA6セルに設定
  ws集計.Cells(5, 1).Value = countインスタ4月 * 20000
  ws集計.Cells(6, 1).Value = countインスタ5月 * 20000
End Sub
上記指示だと
2024/4/1 16:00
のような日付けデータを検索してくれません。
何が間違えているのでしょうか。
式を修正して教えてください
・ツリー全体表示

【82309】Re:フォルダの一括選択
お礼  なんでやねん  - 24/6/6(木) 11:43 -

引用なし
パスワード
   マナさん
下記の通り編集し動作を確認しました。
(準備)提示していただいたコードは、選択したフォルダ内のサブフォルダを一括選択する為、専用フォルダを用意し、そこにデータファイルの入ったフォルダをダウンロードし処理することにしました。
(コード編集)リストボックスに追加したフォルダ(パス)はフォルダ毎に処理するため
  For Each f In fso.getfolder(fdg.SelectedItems(1)).subfolders
    UFフォルダ選択.LB.AddItem f
  Next
としました。
ありがとうございました。
***************************************************************
Sub 起動()
  Dim fdg As FileDialog
  Dim fso As Object
  Dim f As Object
  Dim p As String
  Dim continue As Boolean

  continue = MsgBox("データフォルダを選択してください。", vbYesNo) = vbYes
   If Not continue Then
    Exit Sub
   End If
 
  Set fdg = Application.FileDialog(msoFileDialogFolderPicker)
  If Not fdg.Show Then Exit Sub
 
  Set fso = CreateObject("scripting.filesystemobject")
 
  For Each f In fso.getfolder(fdg.SelectedItems(1)).subfolders
    ' p = f.Path & "\分析.csv"
    UFフォルダ選択.LB.AddItem f
  Next

 UFフォルダ選択.Show
 Set fdg = Nothing
End Sub
・ツリー全体表示

【82308】Re:フォルダの一括選択
お礼  なんでやねん  - 24/6/6(木) 7:15 -

引用なし
パスワード
   マナさん
"filesystemobject"で検索しました。
難解でしたので、生成AI(無料)に提示していただいたコードの解説をかけました。
どちらも私のレベルでは理解不能でしたが、
検索結果と解説を参考にして編集してみます。
成果が出ましたらお伝えします。
一旦、ありがとうございました。
・ツリー全体表示

【82307】Re:フォルダの一括選択
発言  マナ  - 24/6/5(水) 19:39 -

引用なし
パスワード
   ▼なんでやねん さん:

filesystemobjectで検索してみてください。

Sub test()
  Dim fdg As FileDialog
  Dim fso As Object
  Dim f As Object
  Dim p As String

  Set fdg = Application.FileDialog(msoFileDialogFolderPicker)
  If Not fdg.Show Then Exit Sub
  
  Set fso = CreateObject("scripting.filesystemobject")
  
  For Each f In fso.getfolder(fdg.SelectedItems(1)).subfolders
    p = f.Path & "\分析.csv"
    MsgBox p
  Next
  

End Sub
・ツリー全体表示

【82306】フォルダの一括選択
質問  なんでやねん  - 24/6/5(水) 16:08 -

引用なし
パスワード
   (現状)フォルダをひとつづつ選択しそのフォルダパスをフォームのリストボックス(UFフォルダ選択.LB)に登録しています。
(やりたいこと)表示されたフォルダを一括選択したい。可能でしょうか?可能ならその方法をお教えください。
(現状のコード)
Sub 起動()
Dim fldr As FileDialog
Dim sItem As Variant
Dim continue As Boolean

MsgBox "対応するデータフォルダを選択してください。"

Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
  With fldr
    .Title = "データフォルダを選択してください"
    .AllowMultiSelect = True
    continue = True
    While continue
    If .Show = -1 Then
      For Each sItem In .SelectedItems
        UFフォルダ選択.LB.AddItem sItem
      Next sItem
    End If
    continue = MsgBox("選択を続ける", vbYesNo) = vbYes
    Wend
  End With

UFフォルダ選択.Show
  Set fldr = Nothing
End Sub
・ツリー全体表示

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