Excel VBA質問箱 IV

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

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


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

【80442】Re:分類が変わる毎に規則正しく空白行を...
発言  マナ  - 19/2/16(土) 10:06 -

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

>これを最終行まで、分類項目が変わる毎に空白行を以下のように挿入したいのです

条件を指定しないのであれば、できるのでしょうか?

例えば、10行目に、
空白行を1行挿入するマクロはわかるのでしょうか。
空白行を2行挿入するマクロはわかるのでしょうか。

わからなければ、まずはそこから調べてみてください。
・ツリー全体表示

【80441】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 9:34 -

引用なし
パスワード
   ▼ノンボ さん:

何をしているか理解できていませんので
あらためて教えてください。

手作業でならどんな手順になりますか。
箇条書きで説明できますか。

またマクロ実行前だけでなく
実行後も提示お願いします。
・ツリー全体表示

【80440】分類が変わる毎に規則正しく空白行を入れ...
質問  riki7  - 19/2/16(土) 9:27 -

引用なし
パスワード
   /は列が変わる意味です
以下のような一覧があります
大分類/中分類/品物
1/1/1
1/1/2
1/2/1
1/2/2
1/2/3
2/1/1
これを最終行まで、分類項目が変わる毎に空白行を以下のように挿入したいのですが
どうすれば良いでしょうか
空白行(大分類)
空白行(中分類)
1/1/1
1/1/2
空白行(中分類)
1/2/1
1/2/2
1/2/3
空白行(大分類)
空白行(中分類)
2/1/1
・ツリー全体表示

【80439】Re:検索フォームの動作について
発言  マナ  - 19/2/16(土) 9:24 -

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

「検索フォーム」は下記の構成で間違いありませんか

・Textbox:9個+2個
・Listbox:1個
・Combobox:2個
・Commandbutton:2個

 
・ツリー全体表示

【80438】行のデータをクリアして1行づつ繰り上げ...
質問  ノンボ  - 19/2/16(土) 8:11 -

引用なし
パスワード
   お世話になります。
VBA勉強中です。質問させていただきます。
下記フォーマットがあります。

1行目 本体金額  税額 合計金額 入金金額 差額
2行目  60,000  4,800 64,800  64,800   0
3行目  50,000  4,000 54,000
4行目  30,000  2,400 32,400  
5行目  50,000  4,000 54,000
6行目  35,000  2,800 37,800
7行目  30,000  2,400 32,400
8行目  25,000  2,000 27,000
9行目    0
10行目    0

タイトル行の列それぞれ結合されています。本体金額(B〜F),税額(G〜J),入金金額(K〜P),差額(U〜W). 税額、入金金額、差額には数式が入っています。
入金金額により差額が0かそうでないかを判断し、2行目から10行目までのフォーマットを崩さずに、0の場合は、行を1行ずつ繰り上げていきます。0でない場合はデータをそのままにしたく、下記コード書きました。
Sub Test5()
  Dim i As Integer, j As Integer
  j = 1
  For i = 2 To 10
  If (Range("U" & i).Rows) = 0 Then
    Rows(i).ClearContents
  End If
  If (Range("B" & i).Rows <> "") Then
    j = j + 1
    Rows(i).Copy Rows(j)
    Rows(i) = ""
  End If
  Next i
End Sub

 0の場合はうまくいきますが、差額が0でない場合は、セルの結合が解除されデータが全て消えてしまいます。セルの数式も残したいのですが、可能でしょうか。
いろいろ調べたり、試したりしましたがうまくいきません。
どのように編集すればよいかご教授ください。
・ツリー全体表示

【80437】Re:見積FMの情報を集計したい
お礼  mkmk  - 19/2/16(土) 7:44 -

引用なし
パスワード
   お礼がおそくなってすみません。

あれから、VB以外の問題も考え、FMを作り直して実行したところ
早くなりました。
何が原因かは不明なのですが・・・

SELECTを除いてすっきり早くするやり方を教えて頂いて
ありがとうございました。

▼マナ さん:
>▼mkmk さん:
>
>>ただ、速さはあまり変わらないように感じました。
>>
>
>100回のコピペなら1秒もかからないと思います。
>どのくらい時間がかかっているのでしょうか?
・ツリー全体表示

【80436】Re:数のランダム抽選のマクロについて
お礼  nori  - 19/2/15(金) 21:20 -

引用なし
パスワード
   教えていただきありがとうございました。

ほとんど、サイトからのコピペで作成していたため、boolean変数についてわかっておらず、勉強になりました。

希望通りの処理ができました。
・ツリー全体表示

【80435】Re:数のランダム抽選のマクロについて
発言  でれすけ  - 19/2/15(金) 15:21 -

引用なし
パスワード
   こんにちは

初期化って書いたので難しく考えてしまったのかもしれませんが、

配列変数 myFlag の全ての要素に Falseを代入するのです。
Forループで一つ一つの要素に順番に代入してもいいですし、
Erase ステートメントを使っても大丈夫です。

Erace myFlag
・ツリー全体表示

【80434】Re:検索フォームの動作について
回答  tarutaru  - 19/2/15(金) 14:18 -

引用なし
パスワード
   マナ様

お忙しい中、ありがとうございます。
シートの構成等は下記のとおりです。

シートは、2シート用意しており、”2019.4”,”Sheet3”(Sheet2は作成中削除しました)、レイアウトにつきましては、A列は3行目から連番を、Range(“B2:T2”)まで順に「役職・所属・(数字)・氏名・(住所)・(生年月日)・(年齢)・血液型・入社年月日・退社年月日・(在職月)・(在職年月)・(連絡先1)・(連絡先2)・職業構成・就業形態・(会社名)・(会社連絡先)・配偶者」の項目【()内の項目は入力フォームにはボックスとして配置しておりません】を入れており、3行目以降がデータとなります。

また、”2019.4”のRange(“B1”)に「入力」、Range(“C1”)に「検索」のCommandButtonを配置し、「検索」を押すと「検索フォーム」が表示され、”Sheet3”のRange(“B1”)に配置した「一覧表」のCommandButton、押すと、“2019.4”がActivateになるよう設定しています。

次に、「検索フォーム」ですが、フォーム上部に上記各入力ボックスを配置、フォーム下部(フォームの下半分)にListBox1、さらにフォーム上部には、「決定」Comb1、「抽出」Comb3、「RESET」Comb2ボタンを配置しており、「決定」ボタンで絞込後、ListBox1に表示されたリストを選択し、「抽出」ボタンを押すと”Sheet3”に抽出したデータ(List表示されているそのままのデータ)が転記され、その前のリスト選択時のリストだけ、色が変わるようにしたいのですが、上手くいきません。

「RESET」ボタンは押すと、各入力ボックスの内容が空白となり、”2019.4”が「検索フォーム」を残したまま表示されるようにしています。
更にTextBoxを2つ配置しており、TextBox6に「該当数」、TextBox7に「総数」が数字表示されるようにしています。

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

【80433】Re:数のランダム抽選のマクロについて
質問  nori  - 19/2/15(金) 9:36 -

引用なし
パスワード
   早速のお返事ありがとうございます。

頂いた内容で、昨夜調べてみたのですが、boolean 変数をどのように初期化するのかが分からずじまいでした。

お手数ですが、どのようにコード修正すればよいでしょうか。

教えて頂けると助かります。
・ツリー全体表示

【80432】Re:検索フォームの動作について
発言  マナ  - 19/2/14(木) 19:22 -

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

シート構成と各シートのレイアウトも教えてください。
こちらで、マクロを動かして確認したいのです。
・ツリー全体表示

【80431】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/2/14(木) 19:16 -

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

>カレンダーには
>エクセルの年カレンダー(1つのタブで1か月)というものを使っております。
>表示されている日数は日付のみです。


γさんの回答のように、Day(d)で検索しなくて大丈夫?
本当に、シリアル値 CLng(d)で検索ができていますか。
・ツリー全体表示

【80430】Re:数のランダム抽選のマクロについて
発言  でれすけ  - 19/2/14(木) 15:02 -

引用なし
パスワード
   こんにちは

X=8,I=2のとき、myFlagの全てがTrueになるので、
Doループの
Loop Until myFlag(myNum) = False
の行が条件を満足できなくて、永久ループになります。

Iに関するForループの最初に、
myFlagを全部Falseに初期化する処理を入れてください。
・ツリー全体表示

【80429】数のランダム抽選のマクロについて
質問  nori  - 19/2/14(木) 11:07 -

引用なし
パスワード
   vba初心者です。
趣味でロト6の抽選マクロを作ろうとしています。

見よう見まねで以下のコードを作って動かしたのですが、変数X=8 I=2の時にマクロが固まってしまいます。

どのようにコード修正をすれば正常に動くのか、調べたのですがわからずここに質問をさせていただきました。

お手数ですが、教えていただけると助かります。


Sub 数字を6個抽出()
  Dim i As Long, myNum As Long, X As Long
  Dim myFlag(1 To 43) As Boolean

For X = 1 To 20 'X=8 I=2 でエラー ??
  
  '乱数系列を初期化
  Randomize
  For i = 1 To 6
    Do
      myNum = Int(43 * Rnd + 1)
   Loop Until myFlag(myNum) = False
    
    Cells(X, i).Value = myNum
    myFlag(myNum) = True
   
  Next i
 
  '水平方向への並べ替え

  ActiveSheet.Sort.SortFields.Clear
  ActiveSheet.Sort.SortFields.Add Key:=Range("A" & X), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

  With ActiveSheet.Sort
    .SetRange Range("A" & X & ":F" & X)
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlSortRows
    .SortMethod = xlPinYin
    .Apply
  End With
    
 Next X
  
End Sub
・ツリー全体表示

【80428】Re:カレンダーに予定を自動入力したい
回答  VBA初心者  - 19/2/14(木) 10:46 -

引用なし
パスワード
   ▼マナ さん:
>▼VBA初心者 さん:
>
>sheet1のA列とカレンダーの日付は
>それぞれ、どんなデータなのでしょう?
>
>1例ずつで構いませんので、例示お願いします。

sheet1の

A列には
2019/1/25
2019/1/8
2019/1/25
2019/1/1

B列にはすべて
SAMPLE

と打ち込んでいます。

カレンダーには
エクセルの年カレンダー(1つのタブで1か月)というものを使っております。
表示されている日数は日付のみです。

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

【80427】Re:検索フォームの動作について
質問  tarutaru  - 19/2/14(木) 3:30 -

引用なし
パスワード
   ▼tarutaru さん:
>マナ様、早速のご返信ありがとうございます。またご指導ありがとうございました。以後気を付けたいと思います。
>また、説明不足で大変申し訳ありません。
>早速ですが、「検索フォーム」に設置しているListBox1に表示する各Boxの中身は、
>Range(“B”) ComboBox1(役職) = “部 長”,”課 長”,”係 長”,”社 員”
>Range(“C”) ComboBox3(所属) = “営 業”,”内 勤”,”配 送”
>Range(“E”) TextBox1(氏名)
>Range(“I”) ComboBox4(血液型) = “A”,”B”,”O”,”AB”,
>Range(“T”) ComboBox2(配偶者) = “有”,無”
>Range(“P”) ComboBox7(所業構成) =
>Range(“Q”) ComboBox8(就業形態) = 
>Range(“J”) TextBox2(入社年月日) 2000/1/1
>Range(“K”) TextBox3(退職年月日) 2001/1/1
>TextBox6 = 該当数(数字)
>TextBox7 = 総 数(数字) 
>となります。
>
>配置している各Boxのいずれかに入力し、CommandButton1を押すと、該当するデータが抽出され、ListBox1に表示される(例えば、ComboBox1で”社 員”を選択すると、全ての社員のデータが、さらにそこからComboBox3で”内 勤”を選択すると、“社 員”の中から“内 勤”に該当する社員のデータが抽出される。)ようにしてあります。
>そこから、ListBox1に抽出されているデータを1クリック(アクティブに)して、CommandButton2を押すと
>“Sheet3”にAutoFilterを使用したListBox1の内容を転記したいと思っています。
>ところが、ListBox1には問題なく抽出データが表示されるのですが、”Sheet3”に、ListBox1と同じ表示ができません。
>また、ListBox1に抽出されているデータをダブルクリックすると、”Sheet3”の該当するCell(行)が選択表示できようにしたいのですが上手くできません。
>
>よろしくお願いいたします。


すみません。
2箇所未記入のところがありました。

Range(“P”) ComboBox7(所業構成) = ”文字列1”,”文字列2”,”文字列3”,”文字列4”
Range(“Q”) ComboBox8(就業形態) = “文字列1”,”文字列2”,”文字列3”,”文字列4”

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

【80426】Re:検索フォームの動作について
質問  tarutaru  - 19/2/13(水) 22:09 -

引用なし
パスワード
   マナ様、早速のご返信ありがとうございます。またご指導ありがとうございました。以後気を付けたいと思います。
また、説明不足で大変申し訳ありません。
早速ですが、「検索フォーム」に設置しているListBox1に表示する各Boxの中身は、
Range(“B”) ComboBox1(役職) = “部 長”,”課 長”,”係 長”,”社 員”
Range(“C”) ComboBox3(所属) = “営 業”,”内 勤”,”配 送”
Range(“E”) TextBox1(氏名)
Range(“I”) ComboBox4(血液型) = “A”,”B”,”O”,”AB”,
Range(“T”) ComboBox2(配偶者) = “有”,無”
Range(“P”) ComboBox7(所業構成) =
Range(“Q”) ComboBox8(就業形態) = 
Range(“J”) TextBox2(入社年月日) 2000/1/1
Range(“K”) TextBox3(退職年月日) 2001/1/1
TextBox6 = 該当数(数字)
TextBox7 = 総 数(数字) 
となります。

配置している各Boxのいずれかに入力し、CommandButton1を押すと、該当するデータが抽出され、ListBox1に表示される(例えば、ComboBox1で”社 員”を選択すると、全ての社員のデータが、さらにそこからComboBox3で”内 勤”を選択すると、“社 員”の中から“内 勤”に該当する社員のデータが抽出される。)ようにしてあります。
そこから、ListBox1に抽出されているデータを1クリック(アクティブに)して、CommandButton2を押すと
“Sheet3”にAutoFilterを使用したListBox1の内容を転記したいと思っています。
ところが、ListBox1には問題なく抽出データが表示されるのですが、”Sheet3”に、ListBox1と同じ表示ができません。
また、ListBox1に抽出されているデータをダブルクリックすると、”Sheet3”の該当するCell(行)が選択表示できようにしたいのですが上手くできません。

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

【80425】Re:検索フォームの動作について
発言  マナ  - 19/2/13(水) 19:15 -

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

回答側で、簡単に再現できるようにすると良いと思います。

例えば、

>フォームにはComboBox、TextBox等を配置し

これではだめです。
必要な部品をすべて列挙すべきです。

また、コードを実行するための
サンプルデータも必須です。

マルチポストしてもあまり意味はないと思います。
・ツリー全体表示

【80424】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/2/13(水) 18:56 -

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

sheet1のA列とカレンダーの日付は
それぞれ、どんなデータなのでしょう?

1例ずつで構いませんので、例示お願いします。
・ツリー全体表示

【80423】Re:カレンダーに予定を自動入力したい
回答  VBA初心者  - 19/2/13(水) 14:12 -

引用なし
パスワード
   ▼マナ さん:
>▼VBA初心者 さん:
>
>>Worksheet(1月〜12月)にカレンダーを表示させてあります。
>
>まず、1月のシートだけで、ちゃんと動くものにしてください。

マナ様
いつもお世話になっております。
お返事ありがとうございます。

1月のシートのみでしたらγ様が教えてくださったコードで動きました。

Sub カレンダー入力新規()
  Dim ws1     As Worksheet
  Dim ws2     As Worksheet
  Dim lastRow   As Long
  Dim rngCalendar As Range
  Dim rngFound  As Range
  Dim rngFirstcell As Range
  Dim d      As Long
  Dim s      As String
  Dim k      As Long
  Dim i      As Long
  Dim j      As Long
  

  Set ws1 = Worksheets("Sheet1")
  Set ws2 = Worksheets("1月")
  lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
  
  Set rngCalendar = ws2.Range("A1:H14")


   For k = 1 To lastRow
     d = ws1.Cells(k, 1).Value '日付け
     s = ws1.Cells(k, 2).Value 'スケジュール
     i = CLng(d) '日付をシリアル値に変更
    
    
     Set rngFound = rngCalendar.Find(i, After:=rngCalendar(1), _
      LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
      MatchCase:=False, MatchByte:=False, SearchFormat:=False)
  
    
    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 k
  
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


これです!
・ツリー全体表示

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