Excel VBA質問箱 IV

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

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


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

【80402】Re:分類表示を並び替えたい
お礼  riki7  - 19/2/10(日) 17:12 -

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

I am grateful for your support
CurrentRegion
の勉強にもなりました、。
嬉しい!
今後もよろしくお願いいたします
・ツリー全体表示

【80401】Re:ワークシートをコピーし空白行を削除...
発言  マナ  - 19/2/10(日) 9:41 -

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

>時間を短くする処理の仕方を改めて考えようと思います。

オートフィルタを使うと良い気がします。
まずは手作業で期待通り削除できることを確認してはどうでしょうか。
・ツリー全体表示

【80400】Re:分類表示を並び替えたい
発言  マナ  - 19/2/10(日) 9:37 -

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

Option Explicit

Sub test()
  Dim v(1 To 5) As String '1)大大分類,大分類,中分類,小分類,品物
  Dim c As Range
  Dim n As Long
  
  Range("E1").currentredion.ClearContents
  
  For Each c In Range("B1", Range("B1").End(xlDown)) '2)
  
    If c.Offset(, -1).Value <> "" Then       '3)
      v(c.Offset(, -1)) = c.Value
      
    Else                      '4)
      v(5) = c.Value
      n = n + 1
      Range("E" & n).Resize(, 5).Value = v
    End If
    
  Next                        '5)
  
End Sub


  
・ツリー全体表示

【80399】Re:ワークシートをコピーし空白行を削除...
お礼  nonchan E-MAIL  - 19/2/10(日) 9:20 -

引用なし
パスワード
   マナさん
お返事ありがとうございます。
再度実行してみたのですが、うまくいきました!
面倒おかけして、すみませんでした。
行を削除するマクロが、異様に時間がかかってしまっていた
せいか、ものすごく時間がかかって止まったように見えて
しまっていただけでした。
時間を短くする処理の仕方を改めて考えようと思います。

本当に申し訳ありませんでした。
ありがとうございました。
助かりました!


▼マナ さん:
>▼nonchan さん:
>
>>テンプレートには合計600行あって、そのテンプレートには
>>vlookup関数が仕込んであり、他のデータベースから引っ張って
>>きたデータを検索するようになっています。
>
>理解しました。
>
>>失敗しました!!
>
>コードを見た感じでは、問題ないように思えますが。
>失敗とは、削除されないということでしょうか。
>
>ステップ実行とか試してみましたか。
・ツリー全体表示

【80398】Re:分類表示を並び替えたい
発言  riki7  - 19/2/10(日) 9:09 -

引用なし
パスワード
   マナ さん:ありがとうございます。
初心者の理解不足にて
マクロ化のイメージがおぼつかなく
もう少し解決への考えを詳しく教えてくださいませんか?
例えば以下を進めていくとそれぞれどういうデータになっていくのでしょうか?
特に3)以下の部分が
>1)分類名と品物名を覚えておくための配列を用意
>  配列(大大分類,大分類,中分類,小分類,品物)
どこに用意すると良いですか?
>2)元データのB列をB1セルから順番に調べる
>3)左隣(A列)が空欄でなかったら、配列の分類名を更新
>4)空欄ならば
>  4−1)配列の品物名を更新
>  4−2)配列(分類名と品物名)を並べ替え先に貼り付ける
>5)元データのB列最終セルまで繰り返し
・ツリー全体表示

【80397】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/2/10(日) 9:04 -

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

>原因として考えられるのは、検索した結果(rngFound)がdと一つも当てはまらなかった場合の処理が入っていないということかなと思うのですが、その場合どうすればいいでしょうか?
>
>自分としてはIf Not rngFound Is Nothing Thenを使えばいいと思い、何度か組んでみたのですがすべてエラーになってしまうので、教えていただきたいです。

最初の検索の直後に挿入するのでは?
どのように試したのか提示してください。
・ツリー全体表示

【80396】Re:分類表示を並び替えたい
発言  マナ  - 19/2/10(日) 8:48 -

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

こんな感じで考えてはどうでしょうか

1)分類名と品物名を覚えておくための配列を用意
  配列(大大分類,大分類,中分類,小分類,品物)
2)元データのB列をB1セルから順番に調べる
3)左隣(A列)が空欄でなかったら、配列の分類名を更新
4)空欄ならば
  4−1)配列の品物名を更新
  4−2)配列(分類名と品物名)を並べ替え先に貼り付ける
5)元データのB列最終セルまで繰り返し
・ツリー全体表示

【80395】Re:分類表示を並び替えたい
発言  riki7  - 19/2/10(日) 8:29 -

引用なし
パスワード
   質問ありがとうございます
説明不足ですみません
品物名も分類名と同じB列です
▼マナ さん:
>▼riki7 さん:
>>/は列区切りです。
>>以下の並びで表があるとします。
>>1/大大分類名1
>>2/大分類名1
>>3/中分類名1
>>4/小分類名1
>>品物名X
>>品物名Y
>
>品物名Xとか品物名Yは、A列でしょうか?
>
>     -A-     -B-
>1    1    大大分類名1
>2    2    大分類名1
>3    3    中分類名1
>4    4    小分類名1
>5    品物名X    
>6    品物名Y
・ツリー全体表示

【80394】Re:分類表示を並び替えたい
発言  マナ  - 19/2/9(土) 19:48 -

引用なし
パスワード
   ▼riki7 さん:
>/は列区切りです。
>以下の並びで表があるとします。
>1/大大分類名1
>2/大分類名1
>3/中分類名1
>4/小分類名1
>品物名X
>品物名Y

品物名Xとか品物名Yは、A列でしょうか?

    -A-     -B-
1    1    大大分類名1
2    2    大分類名1
3    3    中分類名1
4    4    小分類名1
5    品物名X    
6    品物名Y
・ツリー全体表示

【80393】分類表示を並び替えたい
質問  riki7  - 19/2/9(土) 19:14 -

引用なし
パスワード
   /は列区切りです。
以下の並びで表があるとします。
1/大大分類名1
2/大分類名1
3/中分類名1
4/小分類名1
品物名X
品物名Y
4/小分類名2
品物名Y
4/小分類名3
品物名X
品物名Z
3/中分類名2
4/小分類名1
品物名X
品物名Y
2/大分類名2
3/中分類名2
4/小分類名1
品物名X
品物名Y
この並びを下記の一覧に変換させるマクロを作るにはどうしたら良いでしょうか
大大分類名1/大分類名1/中分類名1/小分類名1/品物名X
大大分類名1/大分類名1/中分類名1/小分類名1/品物名Y
大大分類名1/大分類名1/中分類名1/小分類名2/品物名Y
大大分類名1/大分類名1/中分類名1/小分類名3/品物名X
大大分類名1/大分類名1/中分類名1/小分類名3/品物名Z
大大分類名1/大分類名1/中分類名2/小分類名1/品物名X
大大分類名1/大分類名1/中分類名2/小分類名1/品物名Y
大大分類名1/大分類名2/中分類名2/小分類名1/品物名X
大大分類名1/大分類名2/中分類名2/小分類名1/品物名Y
・ツリー全体表示

【80392】Re:実行時エラー1004 "Selection.S...
お礼  めろん  - 19/2/9(土) 15:01 -

引用なし
パスワード
   ありがとうございました。
無事解決しました。
まだまだ勉強が足りませんが、今後ともよろしくお願い申し上げます。
・ツリー全体表示

【80391】Re:時間の足し算を行うと、yyyy/mm/dd h...
発言  マナ  - 19/2/8(金) 20:51 -

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

正しく集計できているのでしょうか
・ツリー全体表示

【80390】Re:実行時エラー1004 "Selection.S...
回答  亀マスター  - 19/2/8(金) 18:56 -

引用なし
パスワード
   一般的に、エラー1004は存在しないものを操作しようとしたときに発生します。

今回の場合、
Selection.SpecialCells(xlCellTypeConstants, 23)
これは選択中のセル(Selection)の中で定数を含むセルSelection.SpecialCells(xlCellTypeConstants, 23)を指定しますが、選択中のセルの中に定数を含むセルがなければ、存在しないセルのInterior.ColorIndexを操作しようとしたときにこのエラーが発生するのではないかと思います。

そのため、該当するセルが存在するかどうかのチェックを入れる必要があるでしょう。

なお、Selection.SpecialCells(xlCellTypeConstants, 23)の中の「23」が何かはわかっているでしょうか?
ここでは検索対象となるものを指定していますが、
xlNumbers(=1)、xlTextValues(=2)、xlLogical(=4)、xlErrors(=16)の合計が23ということなので、わかりやすくするために
xlNumbers + xlTextValues + xlLogical + xlErrors
を指定した方がいいでしょう。
・ツリー全体表示

【80389】実行時エラー1004 "Selection.Spec...
質問  めろん  - 19/2/8(金) 11:13 -

引用なし
パスワード
    所定のシートに下記のコードがあります。
E列の選択の際に、同一列に選択セルと同じ値がある場合に当該セルおよび当該セルと同じ行のB列について、セルの色が変わるという仕様です。
この仕様で実行時エラー1004が発生します。
このシートの保護(A1:A4とA2:H201以外を保護)と"Selection.SpecialCells" を併用していることが原因ではないかと考えています。
シートの保護は現状の範囲としたいのですが、エラーの回避策はどのようにすればよろしいのでしょうか。ご教示のほど何卒よろしくお願い申し上げます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column <> 5 Then Exit Sub
Dim Trang As Range, Lrang As Range
Application.EnableEvents = False
  Selection.SpecialCells(xlCellTypeConstants, 23).Interior.ColorIndex = 0
  For Each Lrang In Selection.SpecialCells(xlCellTypeConstants, 23)
    If Lrang.Address <> ActiveCell.Address Then
    If Lrang.Value = ActiveCell.Value Then
    Lrang.Interior.ColorIndex = 38
    Lrang.Offset(0, -3).Interior.ColorIndex = 40
    ActiveCell.Interior.ColorIndex = 38
    ActiveCell.Offset(0, -3).Interior.ColorIndex = 40
    End If
    End If
  Next
Application.EnableEvents = True
End Sub
・ツリー全体表示

【80388】Re:時間の足し算を行うと、yyyy/mm/dd h...
お礼  amatsubo E-MAIL  - 19/2/8(金) 8:35 -

引用なし
パスワード
   ▼マナ さん:
>▼amatsuno さん:
>          
>>
>>また、出力先の列を変更する場合、
>>(ここでは、1・2列目に出しているものを、1・3列目にしたい)
>>はどこを変えればよいのでしょうか?
>
>
>With .Range("A1").Resize(dic2.Count)
>  .EntireColumn.ClearContents
>  .Value = Application.Transpose(dic2.Keys)
>End With
>With .Range("C1").Resize(dic2.Count)
>  .EntireColumn.ClearContents
>  .Value = Application.Transpose(dic2.items)
>  .NumberFormatLocal = "h:mm:ss"
>End With


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

【80387】Re:時間の足し算を行うと、yyyy/mm/dd h...
回答  amatsubo E-MAIL  - 19/2/8(金) 8:35 -

引用なし
パスワード
   ▼マナ さん:
>▼amatsuno さん:
>       
>>TEST,    15,    USR3,    8:41:14            
>>TEST,    15,    USR3,    5:41:03            
>>TEST,    15,    USR3,    0:28:32            
>>TEST,    15,    USR3,    2:26:55            
>           
>> 
>> 上記を実行したとき、出力先のカラム2の値がyyyy/mm/dd h/mm/ss表記(カラム2が15の列 ⇒ 1900/1/4 15:18:37)
>> となり、また、合計値が正常でない値(01:17:44と出る予定)が出力されてしまいます
>
>
>17:17:44となりますが?

すいません。上記記載いただいたため、こちらでも何度か確認したのですが、
どうしても1900/1/4 15:18:37でます。
貼り付け時にフォーマット指定を入れる必要があるのでしょうか?
・ツリー全体表示

【80386】Re:ワークシートをコピーし空白行を削除...
発言  マナ  - 19/2/7(木) 19:13 -

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

>テンプレートには合計600行あって、そのテンプレートには
>vlookup関数が仕込んであり、他のデータベースから引っ張って
>きたデータを検索するようになっています。

理解しました。

>失敗しました!!

コードを見た感じでは、問題ないように思えますが。
失敗とは、削除されないということでしょうか。

ステップ実行とか試してみましたか。
・ツリー全体表示

【80385】Re:カレンダーに予定を自動入力したい
質問  VBA初心者  - 19/2/7(木) 11:40 -

引用なし
パスワード
   ▼γ さん:
>カレンダには日付データが、日を表示するだけの形式でセットされているとの前提です。
>straightforwardに、こんなコードではどうでしょうか。
>
>Sub カレンダー入力2()
>  Dim ws     As Worksheet
>  Dim lastRow   As Long  
>  Dim rngCalendar As Range  
>  Dim rngFound  As Range 
>  Dim d      As Long
>  Dim s      As String
>  Dim k      As Long
>
>  Set ws = Worksheets("Sheet1")
>  lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
>  Set rngCalendar = ws.Range("E1:K10")
>
>  For k = 1 To lastRow
>    d = ws.Cells(k, "A").Value '日付け
>    s = ws.Cells(k, "B").Value 'スケジュール
>    Set rngFound = rngCalendar.find(Day(d), After:=rngCalendar(1), _
>      LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
>      MatchCase:=False, MatchByte:=False, SearchFormat:=False)
>    
>    '日でマッチさせると、たかだか2回マッチするだけなのでDo Loopは不要?
>    If d = rngFound.Value Then
>      Call setSchedule(rngFound.Offset(1, 0), s)
>    Else
>      Set rngFound = rngCalendar.FindNext(rngFound)
>      If Not rngFound Is Nothing Then
>        If d = rngFound.Value Then
>          Call setSchedule(rngFound.Offset(1, 0), s)
>        End If
>      End If
>    End If
>  Next
>End Sub
>Function setSchedule(r As Range, s As String)
>  If r.Value = "" Then
>    r.Value = s
>  Else
>    r.Value = r.Value & vbLf & s
>  End If
>End Function

γ様

いつもお世話になっております。
γ様のvbaを参考に自分で作成してみたのですが

If d = rngFound.Value Then
      Call setSchedule(rngFound.Offset(1, 0), s)
    Else
      Set rngFound = rngCalendar.FindNext(rngFound)
      If Not rngFound Is Nothing Then
        If d = rngFound.Value Then
          Call setSchedule(rngFound.Offset(1, 0), s)

↑の部分がうまくいきません。
原因として考えられるのは、検索した結果(rngFound)がdと一つも当てはまらなかった場合の処理が入っていないということかなと思うのですが、その場合どうすればいいでしょうか?

自分としてはIf Not rngFound Is Nothing Thenを使えばいいと思い、何度か組んでみたのですがすべてエラーになってしまうので、教えていただきたいです。
・ツリー全体表示

【80384】Re:ワークシートをコピーし空白行を削除...
回答  nonchan E-MAIL  - 19/2/6(水) 21:23 -

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

テンプレートには合計600行あって、そのテンプレートには
vlookup関数が仕込んであり、他のデータベースから引っ張って
きたデータを検索するようになっています。
ちょっと説明しづらいのですが、

「WBS001] 「WBS002」「WBS003」 〜 [WBS030」
というふうに30コのワークシートができて、それぞれ
データが最大600行、少ないものでは30行程度のワークシート
ができあがります。
600行びっしりデータがあるワークシートと空白行がいっぱい
あるワークシートとが出来上がってしまうのです。

空白行を削除するマクロでワークシートひとつづつ消してい
けばいいのですが、それでは手間がかかってしまうので、
複数のワークシートの空白行を一度に削除できるマクロを
作成したいと思ったのです。

わかりにくい説明で大変申し訳ありません。
よろしくお願いいたします。

▼マナ さん:
>そもそも空白行の削除は
>テンプレートで最初に1回だけ
>でよいのでは?
・ツリー全体表示

【80383】Re:ワークシートをコピーし空白行を削除...
発言  マナ  - 19/2/6(水) 18:28 -

引用なし
パスワード
   そもそも空白行の削除は
テンプレートで最初に1回だけ
でよいのでは?
・ツリー全体表示

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