Excel VBA質問箱 IV

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

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


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

【75339】Re:マクロ複数のワークシートがソートで...
お礼  菊池 早男 E-MAIL  - 14/2/13(木) 14:12 -

引用なし
パスワード
   ▼菊池 早男 さん:
>いつも大変お世話になっております。
>質問箱を拝見し非常に参考になっております。
>早速ですが、下記に内容について先輩諸氏のご指導をいただきたくて投稿いたしました。
>エクセル2007でワークシート上(シート名は10m)に『並べ替え』コマンドボタンでユーザーフォームを出し、ユーザーフォームの「成績順」「氏名順」コマンドボタンでソート出来るようにいたしました。10mのシートをコピーし8m、6mのワークシートを作り同様にソートしようといたしましたが、ソートしないため8m、6mのVBAコードのシート名を確認したところ10mとなっておりました。(シートコピーが原因か?)8mのVBAコードのシート名を8mに変更すると、今度は10mのワークシートがソート出来ずVBAコードを見たら8mに変わっておりました。どなたかリンク変わらない方法をご教授願います。ご多忙中のところと存じますが宜しくお願いいたします。
>
>Macro1 Macro
>'
>  Range("C2").Select
>  ActiveWorkbook.Worksheets("10m").Sort.SortFields.Clear
>  ActiveWorkbook.Worksheets("10m").Sort.SortFields.Add Key:=Range("C2"), _
>    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
>  With ActiveWorkbook.Worksheets("10m").Sort
>    .SetRange Range("B3:C12")
>    .Header = xlNo
>    .MatchCase = False
>    .Orientation = xlTopToBottom
>    .SortMethod = xlPinYin
>    .Apply
>  End With
>End Sub
>
>
>Sub Macro2()
>'
>' Macro2 Macro
>'

マナさん
お忙しい中で早速のご指導大変有難うございました。
ご指導の内容でVBAコードを修正いたしましたら懸案の内容が解決いたしました。誠に感謝いたしております。
これからもご指導いただく機会が多々あると思いますので変わらぬご指導をお願いいたします。
・ツリー全体表示

【75338】Re:サブフォルダを含めた複数ブックのデ...
お礼  おっさんそし  - 14/2/13(木) 14:08 -

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

実際の例としてコードを記載して頂き、
有り難うございます。

つまずいていた理由が非常に明確になりました。

ご丁寧で迅速なご回答誠に有難う御座いました。
・ツリー全体表示

【75337】Re:サブフォルダを含めた複数ブックのデ...
発言  kanabun  - 14/2/13(木) 13:37 -

引用なし
パスワード
   ▼おっさんそし さん:

>サブフォルダを含めるというところで躓いております。

サブフォルダを取得して、 各サブフォルダ名で GetDataを呼べばいいと
思います。

'引数は、フォルダーのパス
Private Sub GetData(ByVal FolderPath As String)
 Dim FSO As New FileSystemObject
 Dim Files As Files
 Dim File As File
 Dim myFolder As Folder
 Dim Fol As Folder
 Dim FileName As String
 Dim TenkiRow As Integer
 Dim ws As Worksheet
 Application.ScreenUpdating = False
 
 '引数のパス内のファイル一覧を取得
 Set myFolder = FSO.GetFolder(FolderPath)
 For Each File In myFolder.Files
   'フルパスを取得
   FileName = FolderPath & "\" & File.Name
   'Debug.Print FileName
   'ファイルを開く
   Workbooks.Open FileName
   Set ws = ActiveWorkbook.Worksheets(1)
   With ThisWorkbook.Worksheets(1)
     '転記先の行を取得
     TenkiRow = .Range("B65536").End(xlUp).Offset(1).Row
     '転記作業
     .Range("A" & TenkiRow).Value = ws.Range("C1").Value
     .Range("B" & TenkiRow).Value = ws.Range("M17").Value
     .Range("C" & TenkiRow).Value = ws.Range("A9").Value
     .Range("D" & TenkiRow).Value = ws.Range("F9").Value
     .Range("E" & TenkiRow).Value = ws.Range("L2").Value
     .Range("F" & TenkiRow).Value = ws.Range("C30").Value
   End With
   Set ws = Nothing
   'ファイルを閉じる
   ActiveWorkbook.Close False
 Next
'-----------------------------------------------------------
 For Each Fol In myFolder.SubFolders
   GetData FolderPath & "\" & Fol.Name
 Next
'-----------------------------------------------------------
 Application.ScreenUpdating = True
End Sub
・ツリー全体表示

【75336】テキストボックスの背景色
質問  青空  - 14/2/13(木) 11:47 -

引用なし
パスワード
   条件分岐によってテキストボックスの背景色の色を変更する方法が知りたくて
質問します。

E1が"有効"であれば背景色を"黄色"、無効であれば赤に変更したいと思います。

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

【75335】サブフォルダを含めた複数ブックのデータ...
質問  おっさんそし  - 14/2/13(木) 11:19 -

引用なし
パスワード
   初めて質問させていただきます。
過去ログがエラーで見られない為、新規投稿させて頂きました。

掲題のような作業をするマクロを作成したいのですが、
サブフォルダを含めるというところで躓いております。

以下、現在のコードです。


Private Sub GetData(ByVal FolderPath As String)
'引数付のサブルーチン
'引数は、フォルダーのパス
Dim FSO As New FileSystemObject
Dim Files As Files
Dim File As File
Dim FileName As String
Dim TenkiRow As Integer
Application.ScreenUpdating = False

'引数のパス内のファイル一覧を取得
Set Files = FSO.GetFolder(FolderPath).Files
For Each File In Files
'フルパスを取得
FileName = FolderPath & "" & File.Name
'ファイルを開く
Workbooks.Open FileName
With ThisWorkbook.Worksheets(1)
'転記先の行を取得
TenkiRow = .Range("B65536").End(xlUp).Offset(1).Row
'転記作業
.Range("A" & TenkiRow).Value = _
ActiveWorkbook.Worksheets(1).Range("C1").Value
.Range("B" & TenkiRow).Value = _
ActiveWorkbook.Worksheets(1).Range("M17").Value
.Range("C" & TenkiRow).Value = _
ActiveWorkbook.Worksheets(1).Range("A9").Value
.Range("D" & TenkiRow).Value = _
ActiveWorkbook.Worksheets(1).Range("F9").Value
.Range("E" & TenkiRow).Value = _
ActiveWorkbook.Worksheets(1).Range("L2").Value
.Range("F" & TenkiRow).Value = _
ActiveWorkbook.Worksheets(1).Range("C30").Value
End With

'ファイルを閉じる
ActiveWorkbook.Close False
Next
Application.ScreenUpdating = True
End Sub


Sub ファイルの取得()
'サブルーチンを使って、
'指定フォルダ内のファイルの値を転記する
Dim MyPath As String
'変数に、フォルダのパスを代入
MyPath = "C:\Users\親フォルダのパスを記載しています。"
'サブルーチンの呼び出し
GetData MyPath
End Sub


具体的な訂正箇所、追記などご教示頂けますと非常に
助かります。

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

【75334】Re:各列の最終行の数値の合計
お礼  Kioyu  - 14/2/13(木) 0:35 -

引用なし
パスワード
   先程、あきなさんから回答を頂きました。
気遣い有難うございました。

推察どおり、COUNT関数を使い、各列の個数を求めていましたが、その後が力不足
でした。
今後も、ご指導の程よろしくお願いいたします。
・ツリー全体表示

【75333】Re:各列の最終行の数値の合計
お礼  Kioyu  - 14/2/13(木) 0:26 -

引用なし
パスワード
   有難うございました。
私にとっては難問の解決でした。

 LastRow = ActiveSheet.Cells(Rows.Count, i).End(xlUp).Row を使って
 セルの個数を出していたのですが、その後は、値に変更せざるを得ないと思っていました。
 それから、Ans の使い方は、まだ私には無理です。
 実際には、手作業でやっていた領収書の最終整理をマクロで使えるは嬉しい限りです。

早々と回答を頂き恐縮しています。
今後も、よろしくお願いいたします。
・ツリー全体表示

【75332】Re:各列の最終行の数値の合計
回答  あきな  - 14/2/12(水) 23:38 -

引用なし
パスワード
   Kioyuさん、みなさん、こんにちは。

Kioyuさん、マナさんのおっしゃる通り、Count関数を使うのがベストだと思います。

が、作成されたプロシージャは、あと一歩!のところまで出来ているようなので、
最後まで完成させたい・・ですよね。こんな感じで、いかかでしょう。

合計値を入れるための変数[Ans]を追加しました。
MsgBoxの先頭にある(')をはずすと、[Ans]の動きが分かると思います。

Sub 領収書総数()
  Dim LastRow As Long
  Dim i As Integer, LastClm As Integer
  Dim Ans As Integer

  LastClm = ActiveSheet.Cells(1, 2).End(xlToRight).Column
  Ans = 0
  For i = 2 To LastClm
    LastRow = ActiveSheet.Cells(Rows.Count, i).End(xlUp).Row
    Ans = Ans + Cells(LastRow, i).Value
    'MsgBox "取得した数値=" & Cells(LastRow, i).Value & vbCr & _
        "合計値=" & Ans
  Next i
    Range("H1").Value = Ans
End Sub
・ツリー全体表示

【75331】Re:各列の最終行の数値の合計
発言  マナ  - 14/2/12(水) 22:54 -

引用なし
パスワード
   各列の個数はどうやって求めているのですか。
COUNT関数でしょうか。
同じ関数で、列でなく全範囲の個数を求めればよいのでは?
・ツリー全体表示

【75330】Re:指定した数値だけを削除したい
発言  kanabun  - 14/2/12(水) 22:34 -

引用なし
パスワード
   ▼隼 さん:
>▼kanabun さん:
>私は今、あるデータをスクリーニング後コピペ入力しています。
>1回目に入力したものが
>  A  B   C   D
>1…… 1111 …… ……
>2…… 1112 …… ……
>3…… 1113 …… ……
>4…… 1114 …… ……
>だとします。入力後の検討結果、B列の1111、1114の各行のデータは不要だとします。プロシージャのステートメントとして、「B列に1111、1114とあれば、それらの各行は削除」としておけば、2回目以降のコピペ入力データの中でB列に1111、1114があれば、マクロ実行の時それらの行は削除されると考えます。
>また、2回目以降コピペ入力データの中で、逐次不要なデータはステートメントを追記して削除できるものと考えます。

ごめんなさい。分りません m(_ _)m

[B5]セルより下に 入力規則で

数式が、
=AND(B5<>$B$1,B5<>$B$4)
としておけば、
[B1]には 1111 があり、 [B4]には 1114 があるから、
これらのセルの値と同じ数値の入力は禁止できます。
・ツリー全体表示

【75329】Re:各列の最終行の数値の合計
発言  Kioyu  - 14/2/12(水) 21:09 -

引用なし
パスワード
   説明が不十分で申し訳ありません。

> (1)Cellsプロパティの使い方が違うのでは?
>          Cells(行インデックス, 列インデックス)

    Cells(1,2) は、「あ」の位置にしています。 

>(2)変数iは必要? (変数LastClmと同じでは?)

    ご指摘の通り、LastClmの変数に利用するだけで問題がないですね。


>(3)変数SUMは不要では? 
>     (変数としてではなく、ワークシート関数のSumを使いたいのですよ
ね?)

   実は、SUMとSumの使い分けが出来ない状況でした。 
>
> (4)Sum関数の中で「&」を使っているのはなぜ?

    どうしていいのか分からず、Cell間のつなぎに入れてみた次第です。
>
> (5)合計を「最終行に入れたい」とのことですが、「各行の最終列」ということ?
>     (項目「い」の行なら値「23」の右側、項目「は」の行なら値「1」の右側?) 

   各列の数字のあるセルの個数を最後のセルに入れています。
   5、6、3、4、1 の数値を変数により合計して、他のセルに表示することが目的としています。

説明不足でお手数をお掛けします。よろしくお願いします。
・ツリー全体表示

【75328】Re:各列の最終行の数値の合計
発言  あきな  - 14/2/12(水) 19:56 -

引用なし
パスワード
   回答ではありませんが、とりあえず気が付いたことです。

(1)Cellsプロパティの使い方が違うのでは?
         Cells(行インデックス, 列インデックス)

(2)変数iは必要? (変数LastClmと同じでは?)

(3)変数SUMは不要では? 
    (変数としてではなく、ワークシート関数のSumを使いたいのですよね?)

(4)Sum関数の中で「&」を使っているのはなぜ?

(5)合計を「最終行に入れたい」とのことですが、「各行の最終列」ということ?
    (項目「い」の行なら値「23」の右側、項目「は」の行なら値「1」の右側?)
・ツリー全体表示

【75327】Re:マクロ複数のワークシートがソートで...
発言  マナ  - 14/2/12(水) 19:31 -

引用なし
パスワード
   ボタンのあるシート(ActiveSheet)をソートしたいのであれば

ActiveWorkbook.Worksheets("10m")
の部分を
ActiveSheetにしたらどうでしょうか
・ツリー全体表示

【75326】お茶の種類
発言  タオバオ代行 E-MAIL  - 14/2/12(水) 18:54 -

引用なし
パスワード
   タオバオ 代行:jpdaikou.rigouwang.com
taobao代行:jpdaikou.rigouwang.com
タオバオ:jpdaikou.rigouwang.com
taobao:jpdaikou.rigouwang.com
中国 代行:jpdaikou.rigouwang.com
淘宝網:jpdaikou.rigouwang.com 
中国 仕入れ:jpdaikou.rigouwang.com 
中国オークション:jpdaikou.rigouwang.com 

salesjp@rigouwang.com

タオバオ代行:www.86daikou.com/  タオバオ代行 中国代行
タオバオ:www.86daikou.com/
taobao:www.86daikou.com/
taobao代行:www.86daikou.com/
中国 代行:www.86daikou.com/
淘宝網:www.86daikou.com/
中国 仕入れ:www.86daikou.com/
中国オークション:www.86daikou.com/

service@86daikou.com/
・ツリー全体表示

【75325】マクロ複数のワークシートがソートできな...
質問  菊池 早男 E-MAIL  - 14/2/12(水) 17:55 -

引用なし
パスワード
   いつも大変お世話になっております。
質問箱を拝見し非常に参考になっております。
早速ですが、下記に内容について先輩諸氏のご指導をいただきたくて投稿いたしました。
エクセル2007でワークシート上(シート名は10m)に『並べ替え』コマンドボタンでユーザーフォームを出し、ユーザーフォームの「成績順」「氏名順」コマンドボタンでソート出来るようにいたしました。10mのシートをコピーし8m、6mのワークシートを作り同様にソートしようといたしましたが、ソートしないため8m、6mのVBAコードのシート名を確認したところ10mとなっておりました。(シートコピーが原因か?)8mのVBAコードのシート名を8mに変更すると、今度は10mのワークシートがソート出来ずVBAコードを見たら8mに変わっておりました。どなたかリンク変わらない方法をご教授願います。ご多忙中のところと存じますが宜しくお願いいたします。

Macro1 Macro
'
  Range("C2").Select
  ActiveWorkbook.Worksheets("10m").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("10m").Sort.SortFields.Add Key:=Range("C2"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  With ActiveWorkbook.Worksheets("10m").Sort
    .SetRange Range("B3:C12")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
End Sub


Sub Macro2()
'
' Macro2 Macro
'
・ツリー全体表示

【75323】Re:数値配列からビットマップ画像を出力...
回答  ちび坊主  - 14/2/12(水) 15:24 -

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

見直したら、おかしなところがいろいろあったので、消しました。

Private Type BITMAPFILEHEADER
   bfType As Integer
   bfSize As Long
   bfReserved1 As Integer
   bfReserved2 As Integer
   bfOffBits As Long
End Type
Private Type BITMAPINFOHEADER '40 bytes
   biSize As Long
   biWidth As Long
   biHeight As Long
   biPlanes As Integer
   biBitCount As Integer
   biCompression As Long
   biSizeImage As Long
   biXPelsPerMeter As Long
   biYPelsPerMeter As Long
   biClrUsed As Long
   biClrImportant As Long
End Type

Private Sub CreateBmpFile(PixData(), BmpPath As String)
 Dim bmH As BITMAPFILEHEADER
 Dim BmI As BITMAPINFOHEADER
 Dim buf() As Byte
 Dim lBmpByteWidth As Long
 Dim lBMPWidth As Long
 Dim lBMPHeight As Long
 Dim i As Long, j As Long, k As Long
 Dim fio As Integer

 lBMPWidth = UBound(PixData, 1) - LBound(PixData, 1) + 1
 lBMPHeight = UBound(PixData, 2) - LBound(PixData, 2) + 1
 lBmpByteWidth = 3 * lBMPWidth + ((4 - (3 * lBMPWidth Mod 4)) * _
         Sgn(3 * lBMPWidth Mod 4))
 ReDim buf(0 To lBmpByteWidth - 1, 0 To lBMPHeight - 1)
 For i = 0 To lBmpByteWidth - 3 Step 3
  k = 0
  For j = lBMPHeight To 1 Step -1
   buf(i, k) = PixData(i \ 3, j - 1)   'B
   buf(i + 1, k) = PixData(i \ 3, j - 1) 'G
   buf(i + 2, k) = PixData(i \ 3, j - 1) 'R
   k = k + 1
  Next
 Next

 With bmH
  .bfType = CInt("&H" & VBA.Hex(Asc("M")) & VBA.Hex(Asc("B")))
  .bfOffBits = Len(bmH) + Len(BmI)
  .bfSize = lBMPHeight * lBmpByteWidth + .bfOffBits
 End With

 With BmI
  .biSize = Len(BmI)
  .biWidth = lBMPWidth
  .biHeight = lBMPHeight
  .biPlanes = 1
  .biBitCount = 24
  .biSizeImage = lBmpByteWidth
 End With

 fio = FreeFile()
 Open BmpPath For Binary As fio
  Put fio, , bmH
  Put fio, , BmI
  Put fio, , buf()
 Close fio
End Sub


Sub Sample02()
 Dim i As Long, j As Long
 Dim colorb()
 ReDim colorb(0 To 200, 0 To 99)

 For i = LBound(colorb, 1) To UBound(colorb, 1)
  For j = LBound(colorb, 2) To UBound(colorb, 2)
   colorb(i, j) = i
  Next
 Next

 CreateBmpFile colorb, "D:\temp\test01.bmp"
End Sub
・ツリー全体表示

【75322】各列の最終行の数値の合計
質問  Kioyu  - 14/2/12(水) 13:41 -

引用なし
パスワード
   列ごとに数字を入れたセルの合計を、最終行に入れたのですが、次にそれぞれの合計を総数として合算しようとしても、SUM関数を利用したコードが作れない。
実力の無さを痛感して投稿しました。ご回答よろしくお願いします。

    あ    い    う    え    お
い    2     6     5     8     23
ろ    3     9     4     2     1
は    3     3     9     1     
に    4     3     3     3     
ほ    4     3         4     
へ    5     3             
と        6             
                    
Sub 領収書総数()
  Dim LastRow As Long
  Dim i As Integer, LastClm As Integer
  Dim SUM As Variant
 
    LastClm = ActiveSheet.Cells(1, 2).End(xlToRight).Column
  For i = 2 To LastClm
    i = ActiveSheet.Cells(1, i).Column
    LastRow = ActiveSheet.Cells(Rows.Count, i).End(xlUp).Row
    
   Range("H1").Value = Application.WorksheetFunction.SUM(Cells(LastRow,    i).Value & Cells(LastRow, LastClm).Value)
 
  Next i
End Sub
・ツリー全体表示

【75320】Re:指定した数値だけを削除したい
お礼    - 14/2/12(水) 13:37 -

引用なし
パスワード
   ▼kanabun さん:
私は今、あるデータをスクリーニング後コピペ入力しています。
1回目に入力したものが
  A  B   C   D
1…… 1111 …… ……
2…… 1112 …… ……
3…… 1113 …… ……
4…… 1114 …… ……
だとします。入力後の検討結果、B列の1111、1114の各行のデータは不要だとします。プロシージャのステートメントとして、「B列に1111、1114とあれば、それらの各行は削除」としておけば、2回目以降のコピペ入力データの中でB列に1111、1114があれば、マクロ実行の時それらの行は削除されると考えます。
また、2回目以降コピペ入力データの中で、逐次不要なデータはステートメントを追記して削除できるものと考えます。
このことができるプロシージャを希望したいのですが。
>▼隼 さん:
>
>
>> B
>>1111
>>1112
>>1113
>>1114
>>と入力しました。このとき1111,1114は不要なので、
>
>「1111,1114」 が、なぜ不要なのか、言葉にできますか?
・ツリー全体表示

【75318】Re:指定した数値だけを削除したい
発言  kanabun  - 14/2/12(水) 10:14 -

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


> B
>1111
>1112
>1113
>1114
>と入力しました。このとき1111,1114は不要なので、

「1111,1114」 が、なぜ不要なのか、言葉にできますか?
・ツリー全体表示

【75317】Re:指定した数値だけを削除したい
お礼    - 14/2/12(水) 10:11 -

引用なし
パスワード
   ▼kanabun さん:
返事が遅れて申し訳ありません。
B
1111
1112
1113
1114
と入力しました。このとき1111,1114は不要なので、
以後の入力時に1111,1114を入力した時はマクロを
動作させたとき1111,1114の行は削除したい。
ということを希望しています。

>データと処理内容とがハッキリしませんが、
>
>> 4ケタの数値のうち 指定した数値だけ を削除
>
>なら、フィルタを使うのも手だと思います。
>
>いまB列に、↓のような4桁の数値があり、
>
>支店 商品番号 担当    カナ
>A    5772    橋本    はしもと
>B    4204    高山    たかやま
>C    2989    岡田    おかだ
>D    1331    平山    ひらやま
>A    1399    須藤    すどう
>B    6347    加藤    かとう
>C    4735    君島    きみじま
>D    9815    村上    むらかみ
>A    9033    荒川    あらかわ
>B    3442    丸山    まるやま
>C    9708    佐々木    ささき
>D    8371    大貫    おおぬき
>A    2187    佐藤    さとう
>B    5764    鈴木    すずき
>C    5646    山口    やまぐち
>D    5100    山本    やまもと
>A    6624    吉田    よしだ
>B    1834    坂本    さかもと
>C    9545    手塚    てづか
>
>このうち、5000以上 9000未満の数値の行を削除したいとき、
>AutoFilter でその範囲を指定して、あてはまる
>数値の行をあぶりだし、一括行削除できます。
>
>Sub Try1()
>  Dim r As Range
>  
>  ActiveSheet.AutoFilterMode = False
>  Set r = Range("B1", Cells(Rows.Count, 2).End(xlUp))
>  r.AutoFilter 1, ">=" & 5000, xlAnd, "<" & 9000 '← 範囲を指定
>  If MsgBox("Are you sure delete these Lines?", _
>    vbOKCancel) = vbOK Then
>    r.Offset(1).EntireRow.Delete
>  End If
>  r.AutoFilter
>End Sub
>
>支店 商品番号 担当    カナ
>A    5772    橋本    はしもと
>B    6347    加藤    かとう
>D    8371    大貫    おおぬき
>B    5764    鈴木    すずき
>C    5646    山口    やまぐち
>D    5100    山本    やまもと
>A    6624    吉田    よしだ
・ツリー全体表示

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