- 締切済み
エクセル マクロ Matchの使い方
前回の質問で、大変親切に回答して頂き、大変感謝しております。 でも、私自身がこの質問サイトのルールを把握していなっかたので、まだ問題が解決していないのに、親切に回答してくださった方を、ベストアンサーに選んでしまいました。 でも、まだ問題が解決していないので、再度質問をさせて頂きます。 私のやりたい事は下記のような事です。 現金出納帳シートのA列(大科目)B列(小科目)の文字列の中の 大科目(たとえば会費・入会金)小科目(たとえば会費) この二つの文字が、決算シートのA列(大科目)の範囲のB列(小科目)の同じ文字と一致したときに 現金出納帳シートのB列(小科目)の一致した文字の行の4列目の数値を決算シートのB列(小科目)の同じ文字の行の右隣のセルに、出納帳に入力した数値を入れたいのです。 前回の回答を参考に、下記のようなマクロを試してみたのですがどうしてもうまくいくません。 Dim s Dim h As Variant Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Range("B3:B103").Value For Each ws In Worksheets s = ws.Index Next ws For K = 5 To s Step 1 Set KaMoku = Sheets(K).Range("D3:J103").Columns(1) Next K If IsError(Application.Match(h, KaMoku, 0)) = False Then この用にするとここでエラーになります。 MyRNo = Application.WorksheetFunction.Match(h, KaMoku, 0) 実行時エラー方が一致しません MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N End If End Sub もう一例 Dim s Dim h As Variant Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Range("B3:B103").Value For Each ws In Worksheets s = ws.Index Next ws For K = 5 To s Step 1 Set KaMoku = Sheets(K).Range("D3:J103").Columns(1) Next K If IsError(Application.Match(h, KaMoku, 0)) = False Then では、.WorksheetFunctionがいけないのかと思って、この用にすると、アプリケーション定義と出ます。 MyRNo = Application.Match(h, KaMoku, 0) MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) 実行時エラー アプリケーション定義またはオブジェクトの定義エラー N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N End If End Sub 素人の私には皆目見当がつきません、どうすれば良いのですか。 教えてください、どうかよろしくお願いします。
- tetsuokouchi
- お礼率100% (8/8)
- Visual Basic
- 回答数7
- ありがとう数8
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- TAKA_R
- ベストアンサー率32% (26/79)
何を説明するか、悩んだのですが・・・ 他の方の言われるように、まず標準モジュールにかかれてはどうでしょう。 標準モジュールのつくりの方が簡潔で、初心者にはエラー探しもしやしやすいですよ。 ちなみに標準モジュールを開いて、「sub マクロ名()」を書けば、end subが書き込まれるので、その間にコードをコピぺすればよいです。 動かし方はシートに絵とかボタンを貼って、マクロ登録したら動きます。 やっぱりイベントモジュール(今使っているところ)がいいと思ったら、コピペしてしまえばよいのです。 hはあってます。 次にsですが。意外に重要な位置を占めてる割にスルーされていますね。 前の質問、今回の質問で、何を求めたいのか図りかねたのですが・・・。 For k = 5 To s から察するに現金出納帳の欄は5行目から始まって、s行目まであるということでしょうか。(step 1 は標準になので書かなくても良いです) 現金出納帳がこのシートにのみに書かれていると仮定して、最後の行数をsに入れたいとしたら。 s=activesheets.usedrange.rows.count 小科目は別の大科目の小科目とダブっているということはないですか? ないなら、いろんな意味で楽です。 ダブっていたら、別の関数を同時使用もしくはちょっと複雑なことをしないといけません。 面倒なので小科目にダブりがないとして。 kamokuはセルの値(.valueで表されるもの)を指すと思われるので、setの必要はないです。 (でもマクロの頭の方で、宣言してあげましょう、as string です) それからkですが。 ここが一番よく分からなかったのですが、現金出納帳のシートがいっぱいあるんでしょうか。 そうでないなら、無視して。 sub 転記() dim h dim s as long, k as long,v as long,a as long,b as long dim kamoku as string dim ws1 as worksheet,ws2 as worksheet set ws1=worksheets("決算") set ws2=worksheet("現金出納帳") 'シート名は正しく入れなおして s=ws2.usedrange.rows.count h = ws1.Range("B3:B103") ws1.activate '書き込むシートは選択されていないと書くことができないので for k=5 to s if ws2.range("b"&k)<>"" then '現金出納の小科目が空欄だとエラーになるだろうから kamoku=ws2.range("b"&k) v=Application.Match(kamoku,h, 0) a=ws1.range("c"&2+v) '&の後ろは3+v-1を計算した数、aは決算の科目の隣のセルの数字 b=ws2.range("f"&k) '現金出納の数字の入っている列がF(?) if v<>0 then a=a+b range("c"&2+v).value=a end if end if next end sub
- piyo_dansyaku
- ベストアンサー率75% (12/16)
以前回答した者です。 以前の処理を見たときに気になってはいたのですが、Worksheet_SelectionChangeはセルを選択するたびに毎回実行されるイベントです。 それにより、毎回マクロが実行される負荷がかかります。 本当に必要なプログラムでなければ、Worksheet_Change(セルに値を入力した時に実行されるイベント)か標準モジュールでマクロを組むのがよい気がします。 この処理を活かすのであれば、Worksheet_Change。 また、Matchについても下で回答があるように、使い方のわからない処理よりもFor文で書いたほうがよい気がします。 あと確認ですが、ブレークポイントをはってデバッグ実行はされていますか?
お礼
そうですね、標準モジュールに書きます。 Worksheet_Change。のことも有り難うございます。
- Rilakkuma_san
- ベストアンサー率32% (33/101)
もう一例で提示されているものだと MyRNoに値が入っていないように見えました。 もしほんとに値が入っていなければ 入っていない値をCellsに指定してはエラーとなります。 Matchとかそうゆうものを使用せずとも Forでループさせるという選択肢があるなら ============================================== Private pRow As Long Private pCol As Long Private Sub Worksheet_Activate() pRow = ActiveCell.Row pCol = ActiveCell.Column End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Integer a_data = ActiveSheet.Cells(pRow, 1).Value b_data = ActiveSheet.Cells(pRow, 2).Value For i = 1 To 103 If Sheets("決済").Cells(pRow, 1).Value = a_data And _ Sheets("決済").Cells(pRow, 2).Value = b_data Then Sheets("決済").Cells(pRow, 3).Value = ActiveSheet.Cells(pRow, 4).Value End If Next pRow = Target.Row pCol = Target.Column End Sub =============================================== ちょっと不格好かもしれませんがこんな感じにすると セルが移動した時に移動前の値を決済シートに反映することができると思います。 シート構成なんかはよくわからないので適宜変更してください。 提示したものだとどこの列だろうと反映させてしまうので 列判定は必要かもしれません。
お礼
おっしゃる通りだと思います。 全然わからない関数をつかうよりも、Forでループさせた方が良いですね と言っても素人なので、他の事も分からないんですが。 親切にマクロまで書いて頂いて、とっても感謝しています。 書いて頂いたマクロを参考に、出納帳のマクロを書いてみます。 出納帳も標準モジュールに書く用にします。 有り難うございます。
補足
私なりに努力して、この用にして、各月の出納帳にマクロを書いてみました。 Private pRow As Long Private pCol As Long Private Sub Worksheet_Activate() pRow = ActiveCell.Row pCol = ActiveCell.Column End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Integer pRow = ActiveCell.Row pCol = ActiveCell.Column a_data = ActiveSheet.Cells(pRow, 4).Value b_data = ActiveSheet.Cells(pRow, 5).Value For i = 1 To 103 If Sheets("決算").Cells(pRow, 2).Value = a_data And _ Sheets("決算").Cells(pRow, 3).Value = b_data Then Sheets("決算").Cells(pRow, 5).Value = ActiveSheet.Cells(pRow, 8).Value End If Next i pRow = Target.Row pCol = Target.Column End Sub 最初の一回はうまく決算シートに転記できるのですけど 二回目からは転記できません。 1回目 出納帳 月 日 大科目 小科目 摘要 入金 出金 残高 会費・入会金 会費・入会金 2000 2000 決算 大科目 小科目 金額 会費・入会金 会費・入会金 2000円 2回目 出納帳 月 日 大科目 小科目 摘要 入金 出金 残高 会費・入会金 会費・入会金 2000 2000 会費・入会金 会費・入会金 2000 4000 決算 大科目 小科目 金額 会費・入会金 会費・入会金 2000円(ここの金額が増えない) 又は 出納帳 月 日 大科目 小科目 摘要 入金 出金 残高 会費・入会金 会費・入会金 2000 2000 会費・入会金 会費・入会金 2000 4000 会費・入会金 会費 2000 6000 決算 大科目 小科目 金額 会費・入会金 会費・入会金 2000円 会費・入会金 会費 2000円(ここに数値がはいらない) どうすれば良いのですか、教えてください。
- Rilakkuma_san
- ベストアンサー率32% (33/101)
ちなみにですが、 この処理が動作するタイミングは 出納帳に数値が入力された時ですかね?
お礼
色々細かい所まで考えて下さって、とっても感謝しています。 ありがとうございます。
補足
出納帳は、4月~3月までを最初の画面で、その月の数値を入力すれば たとえば4と入力すれば、4月分と言うシートができるようにしてありますので この処理が動作するタイミングは、決算シートをマウスでクリックした時です。 本当は、各月分出納帳に数値を入力した時点でこの処理が動作すれば良いと思います。
- Rilakkuma_san
- ベストアンサー率32% (33/101)
ANo1です。 offsetは「0」の省略なんですね。。。 失礼しました。。
お礼
いろいろ考えてくれてありがとうございます。
補足
本当に素人なので、そこのところがあんまりわからないのです。
- Rilakkuma_san
- ベストアンサー率32% (33/101)
ANo1です。 >MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) の「Offset(, 4)」はなんか記述ミスですか?
お礼
回答ありがとうございます。 Offset(,4)は違うんですか、VBAの本にはそういう用に書いてあったのでそうしたのですが、
- Rilakkuma_san
- ベストアンサー率32% (33/101)
こんにちわ。 VBAはあまり使わないので自信がないですが。。。 Match関数の使い方が違う気がします。 Match(検査値, 検査範囲, 仕様) という書式なので 「h」というVariant配列では検査値との型が不一致で エラーとなっているんじゃないでしょうか?
お礼
早速回答して頂いてありがとうございます。 範囲指定して文字列を検索するときは Dim h As Variantで良いみたいなのですが。 If IsError(Application.Match(h, KaMoku, 0)) = False Then やりたい事 ここまではうまくいったのですが、 MyRNo = Application.WorksheetFunction.Match(h, KaMoku, 0) 実行時エラー方が一致しません MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N このへんの構文がどうすれば良いのかさっぱりわかりません。 また気づいた事があったら教えてください。 ありがとうございます。
関連するQ&A
- エクセル 決算マクロ
Dim s Dim h As String Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Cells(3, 2).Value For Each ws In Worksheets s = ws.Index Next ws For k = 5 To s Step 1 Set KaMoku = Sheets(k).Range("D3:J103").Columns(1) MyRNo = Application.WorksheetFunction.Match(h, KaMoku, 0) MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) n = n + MyUNo Sheets("決算").Cells(3, 5).Value = n Next k End Sub 自治会の決算書を作りたいので上記のようなマクロを、インターネットで調べながら 私の知識のない頭をフル回転させて書いてみたのですが。 h = Sheets("決算").Cells(3, 2).Valueで、hへの値の代入が一つのセルからの代入ではなくて h = Sheets("決算").Range("B3:B103").Valueのように範囲から文字をさがしたいのです。 それと MyRNo = Application.WorksheetFunction.Match(h, KaMoku, 0) AND MySNo = Application.WorksheetFunction.Match(K, KoKaMoku, 0) のように、この文字が同じで、次の列のこの文字も同じ時に MyUNo = KaMoku.Cells(MySNo).Offset(, 4) 4列目の値を n = n + MyUNo Sheets("決算").Cells(3, 5).Value =(ではなくて) ここも、一致した文字のあるセルの隣のセルに数値を入れたいのですが、うまくいきません。どうか私に、あなたの素晴らしい知恵をかしてください。 お願いします。
- ベストアンサー
- Visual Basic
- Excel VBAについて
Excel VBAについて教えて頂きたいのですが、 Sub test() Dim lastrow, r, i As Long Dim sh1, sh2 As String Dim ws As Worksheet lastrow = Cells(Rows.count, "D").End(xlUp).row For r = 7 To lastrow '7 For i = 1 To lastrow '4 sh1 = ActiveSheet.Cells(r, 4) ActiveSheet.Cells(r, 20) = _ Application.CountIfs(Sheets(sh1).Range("D:D"), Range("H3") & Range("I3"), Sheets(sh1).Range("K:K"), "<=3") _ / Application.CountIf(Sheets(sh1).Range("D:D"), Range("H3") & Range("I3")) ActiveSheet.Cells(r, 21) = _ Application.CountIfs(Sheets(sh1).Range("C:C"), Range("F3"), Sheets(sh1).Range("K:K"), "<=3") _ / Application.CountIf(Sheets(sh1).Range("C:C"), Range("F3")) ActiveSheet.Cells(r, 22) = _ Application.CountIfs(Sheets(sh1).Range("E:E"), Range("K3"), Sheets(sh1).Range("K:K"), "<=3") _ / Application.CountIf(Sheets(sh1).Range("E:E"), Range("K3")) Sheets(sh1).Range("A3:R3").AutoFilter Field:=4, Criteria1:=Range("H3") & Range("I3") ActiveSheet.Cells(r, 15) = Application.Subtotal(105, Sheets(sh1).Range("O:O")) Sheets(sh1).Range("A3:R3").AutoFilter Field:=4, Criteria1:=Range("H3") & Range("I3") - 200 ActiveSheet.Cells(r, 18) = Application.Subtotal(105, Sheets(sh1).Range("O:O")) Sheets(sh1).Range("A3:R3").AutoFilter Field:=4, Criteria1:=Range("H3") & Range("I3") + 200 ActiveSheet.Cells(r, 19) = Application.Subtotal(105, Sheets(sh1).Range("O:O")) For Each ws In Worksheets ws.AutoFilterMode = False Next Next Next End Sub このコードは ActiveSheetで実行すると D列の7行目から最終行までに入力されている名前のシート(名前=シートがあります) その、シートの参照先で C,D,E列がcountif関数を利用して O列がSubtotal関数を利用しています。 このコードでもやりやいことは実行できるのですが、 時間がかかりすぎてしまいます。 約20件あり約2分ほどかかります。パソコンによっては倍ほど時間がかかるかもです。 そこでなのですが、 もっと処理のスピードを上げたいのですが、 可能でしょうか? 可能ならそのやり方をご教示ください。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- Matchの処理について
下記の処理がどうしてもうまくいかなくて、 皆様のお知恵を拝借できればありがたいです。 Sheet1に下記のように縦に3列データがならんでいます。 A あ 10 A い 12 A う 16 B あ 19 B い 15 B う 7 これをもとにSheet2に下記の通りマトリクス形式に 変換する。 あ い う A 10 12 16 B 19 15 7 これを処理しようと以下の通り記述したのですが、 マッチする項目がなかった場合、どうも行(列)が ずれてヒットしているようです。 On Error Resume Nextが原因のような気がするのですが。 これを回避するにはどうしたらよろしいでしょうか? お助けください~。 よろしくお願い致します。 Dim i As Long Dim j As Long Dim k As Long Dim 検索値A As Variant Dim 検索値B As Variant On Error Resume Next i = 2 Do While (Sheets("SHEET1").Cells(i, 1) <> "") 検索値A = Sheets("SHEET1").Cells(i, 1).Value 検索値B = Sheets("SHEET1").Cells(i, 2).Value j = Application.Match(検索値A, Sheets("Sheet2").Range("範囲A"), 0) k = Application.Match(検索値B, Sheets("Sheet2").Range("範囲B"), 0) Sheets("Sheet2").Cells(j, k).Value =Sheets("SHEET1").Cells(i, 3) i = i + 1 Loop End Sub
- ベストアンサー
- Visual Basic
- エクセルのマクロについて
下記のようなプログラム組んでいます。 Sub 張付() Sheets("一覧表").Select Dim i As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("一覧表") Set ws2 = Worksheets("データー") For i = 5 To ws2.Cells(Rows.Count, 1).End(xlUp).Row ws1.Range("B5") = ws2.Cells(i, 2) 'セルB5に氏名を入力 ws1.Range("C5") = ws2.Cells(i, 3) 'セルC5に年齢を入力 ws1.Range("D5") = ws2.Cells(i, 4) 'セルD5に電話番号を入力 この後、 ws1.Range("B5")のB5をB6にまた、C5はC6に改行してそれぞれデーターを移していきたい のですが、B5をB6に順次プラスする方法を教えて下さい。 よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- excel マクロでデータ抽出したい
excelの抽出をマクロ化しようと思っています。 キー記録で Sheets("data").Range("B11:O714").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("data").Range("G3:G5"), CopyToRange:=_ Range("B4:O615") , Unique:=False を得たので、これを元にして、条件範囲をオートシェイプのある列を条件にしようと思い、 col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column で、オートシェイプの列を取得し、 Sheets("data").Range("B11:O714").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("data").Range(Cells(3, col), Cells(5, col)),_ CopyToRange:=Range("B4:O615") , Unique:=False としたのですが、エラーになってしまいます。 colを使って条件範囲をするにはどうしたらいいのでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセル マクロの設定方法について
差込印刷でSheet1に作成した名簿データにより、sheet2に作成しているデータへ差込印刷をしています。現在、次のようなマクロを組んで名簿の件数に合わせて、For = 2 To 500 Step 8を修正しながら、印刷しています。できたら、名簿の件数の増減に関係なく印刷できるようになればと考えています。始めたばかりのマクロ初心者です。よろしくご教授ください。お願いします。 Dim i As Long Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = sheets(″sheet1″) Set ws2 = sheets(″sheet2″) For i = 2 To 500 Step 8 ws2 .Range(″A1″).Value = ws1.Cells(i+1,2).Value ws2 .Range(″A7″).Value = ws1.Cells(i+2,2).Value ws2 .Range(″A13″).Value = ws1.Cells(i+3,2).Value ws2 .Range(″A19″).Value = ws1.Cells(i+4,2).Value ws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ws2 .Range(″F7″).Value = ws1.Cells(i+6,2).Value ws2 .Range(″F13″).Value = ws1.Cells(i+7,2).Value ws2 .Range(″F19″).Value = ws1.Cells(i+8,2).Value DoEvents ws2.PrintOut Next End Subws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ネット等で調べて、上記のようなマクロで作業してます。(マクロの設定方法が間違っているところがあると思いますが?)
- ベストアンサー
- オフィス系ソフト
- 【エクセル VBA マクロ】
シートAの日付を確認してデータをコピーし、シートBの該当する日付の列に売り上げを貼り付けるというマクロを組みたいです。 他の方達のを参考にしながら作成しましたが、実行をすると「エラー1004」 Matcheプロパティが見つからないというエラーが出ます。 どなたか原因と対策を教えてください。 Sub() Sheets("シートA").Select Range("J3:J10000").Select ※売上データ Selection.Copy 検査値 = Range("R2").Value ※日付データ Sheets("シートB").Select Set 検索範囲 = Range("J4:AN4") ※日付データ 列 = Application.WorksheetFunction.Match(検査値, 検索範囲, 0) Cells("4, 9" + 列).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:False, Transpose:=True End Sub
- 締切済み
- Visual Basic
- エクセル マクロ修正
シート1~5まであります。別に情報シートを作成しています それぞれ同じ原本から作成しています 全部のシートにA1~A10のセルに日付、B1~B10のセルに文字など入力がするところがあります 入力はA1から順番に入れていきます 例えば 保存ボタンを作成しておく シート1のA1に日付、B1に”文字”を入力し、保存ボタンをおす 情報シートに日付と内容が一致する情報がなければ、 情報シートのA列にシート名、B列に日付、C列に入力した内容が 空白のところに出力される ボタンのマクロがCommandButton1_Clickとしたら Private Sub CommandButton1_Click() 検索 End Sub 標準モジュールに Sub 検索() Dim c As Range Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws1LastRow As Long Dim ws2LastRow As Long Set ws1 = Sheets("情報シート") Set ws2 = ActiveSheet If ws2.Range("A1").Value = "" Or ws2.Range("B1").Value = "" Then MsgBox "検索する日付もしくは語句が入力されていません。", vbCritical Exit Sub End If If ws1.Range("A1").Value = "" Then ws1LastRow = 0 Else ws1LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row End If ws2LastRow = ws2.Cells(Rows.Count, "A").End(xlUp).Row For Each c In ws1.Range(ws1.Cells(1, "B"), ws1.Cells(Rows.Count, "B").End(xlUp)) If c.Value2 = ws2.Cells(ws2LastRow, "A").Value2 Then If c.Offset(0, 1).Value = ws2.Cells(ws2LastRow, "B").Value Then MsgBox "既にデータが存在します", vbInformation Exit Sub End If End If Next ws1.Cells(ws1LastRow + 1, "A").Value = ws2.Name ws1.Cells(ws1LastRow + 1, "B").Resize(1, 2).Value = ws2.Cells(ws2LastRow, "A").Resize(1, 2).Value MsgBox "データを追加しました", vbInformation Set ws1 = Nothing Set ws2 = Nothing End Sub これを教えて頂き作っていたのですが 別のシートを作成しこのプログラムを応用していたのですが うまく起動しないため再度投稿しました 今度のやつは固定でやろうと思っていていじったのですが 別の欄の文字が表示してしまった 結合セルB2:C4に日付を入れる 結合セルL2:L30に内容を入れるようにしたいのですが ここだけのセルを参照するようにしたいのです。 どうすればいいでしょうか? 試したことAをB2にかえ、BをL2にしたら変なことになりました・・・
- ベストアンサー
- Excel(エクセル)
- エクセルVBAで不思議な現象が!
エクセル2010です。 理解できない現象で困っています。 Sheets("DATA")の.Range("B1:S1")には、B1が1、C1が2というように1から18までの数値が連番に入っています。S1には18です。 以下のVBAを走らせると、普通はSheets("test")のRange("B26:S26")にも1から18までの数値が連番に入ります。 Sub TEST() Dim ws As Worksheet Dim lr As Long Set ws = ThisWorkbook.Sheets("DATA") lr = 25 With ThisWorkbook.Sheets("test") .Range("B1:S1").Offset(lr).Value = ws.Range("B1:S1").Value 'データ転記 End With End Sub ところが、このSheets("test")の20行目までデータが入っていて、オートフィルターがかかっているとします。(条件はG列の空白だけ抽出) そして、さらにC列以降のどれかの列が非表示になっていると、その非表示列以降のセルはすべて1になってしまいます! なぜ、このような不思議な結果となるのか理解できません。 やむを得ず、オートフィルタをいったん解除し、列を再表示してから転記するようにしていますが、原因がわかりません。 どなたかご教示いただけませんでしょうか?
- ベストアンサー
- Excel(エクセル)
- マクロのソートについて
A列:E列のセルデータがあって、空欄を省いて、コピペでるようにしたのでが、新たに、D列を最初にソート、後からB列・C列を連動させてソートしたいのですが、うまく処理できません。ご教授願えませんか。Sheets("ZZZZZZZ")のデータは1行おきのようなデータです。コピペまではできていますが、その後のソートについてお願いします。 Sub Macro1() Application.ScreenUpdating = False Dim Rng As Range Dim LastRow As Long '●ここをだけ"B2:B100"指定する For Each Rng In Sheets("ZZZZZZZ").Range("B2:B100") If Rng.Value <> "" Then LastRow = Sheets("QQQQQQQQ").Cells(Rows.Count, "B").End(xlUp).Row Sheets("QQQQQQQQ").Cells(LastRow + 1, "B").Resize(1, 3).Value = Rng.Resize(1, 3).Value End If Next Rng Application.CutCopyMode = False Application.ScreenUpdating = True End Sub
- ベストアンサー
- Visual Basic
お礼
有り難うございます。 説明付きの丁寧なマクロを書いて頂き有り難うございます。 このマクロも参考にして勉強させていただきます。
補足
現金出納帳にこの用に書いてみました。 Dim h Dim s As Long, k As Long, v As Long, a As Long, b As Long Dim kamoku As String Dim ws1 As Worksheet, ws2 As Worksheet Private Sub Worksheet_Change(ByVal Target As Range) Set ws1 = Worksheets("決算") Set ws2 = Worksheets("現金出納帳") 'シート名は正しく入れなおして s = ws2.UsedRange.Rows.Count h = ws1.Range("c3:c103") 'ws1.Activate '書き込むシートは選択されていないと書くことができないので For k = 3 To s If ws2.Range("e" & k) <> "" Then '現金出納の小科目が空欄だとエラーになるだろうから kamoku = ws2.Range("e" & k) v = Application.Match(kamoku, h, 0) a = ws1.Range("e" & 2 + v) '&の後ろは3+v-1を計算した数、aは決算の科目の隣のセルの数字 b = ws2.Range("h" & k) '現金出納の数字の入っている列がF(?) If v <> 0 Then a = a + b ws1.Range("e" & 2 + v).Value = a End If End If Next End Sub 現金出納帳 月 日 大科目 小科目 摘要 金額 残高 会費・入会金 会費・入会金 2000 2000 決算 大科目 小科目 合計金額 会費・入会金 会費・入会金 2000円(これはうまくいきました) 現金出納帳 月 日 大科目 小科目 摘要 金額 残高 会費・入会金 会費・入会金 2000 2000 会費・入会金 会費 2000 この時点で型が一致しませんと出ます。 決算 大科目 小科目 合計金額 会費・入会金 会費・入会金 2000円 会費 どのようにすればいいのですか、教えてください。