Page 870 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼超初心者で困ってます チヒロ 03/3/12(水) 13:54 ┣Re:超初心者で困ってます ポンタ 03/3/12(水) 17:15 ┣Re:超初心者で困ってます ゆと 03/3/12(水) 18:46 ┣Re:超初心者で困ってます Jカーター 03/3/12(水) 20:51 ┗Re:超初心者で困ってます チヒロ 03/3/12(水) 21:16 ─────────────────────────────────────── ■題名 : 超初心者で困ってます ■名前 : チヒロ ■日付 : 03/3/12(水) 13:54 -------------------------------------------------------------------------
はじめまして、最近システム業界に入社してきた者です。「マクロで以下の仕様のものを作って来い」と、言われたのですが何をどうしていいかわかりません。期限が迫ってきてネットで調べてたらここにたどり着きました。どなたか助けていただけないでしょうか?お願いします。 ・ 案件NO、さらに枝番 毎に借方、貸方それぞれの合計を出す。 ・ 枝番 が”1”のときに借方にあればマイナスする。が、”1”以外のときはそのまま足し算する。 ・ 貸方 はそのまま足し算をする。 ・ 案件と指定した枝番のみを計算する。 {EX:Msgboxにて「案件NO」指定、次のMsgboxにて枝番を指定(1、3 又は1、3、5、7など...指定された枝番のみを計算する) (EX:表で言うと、案件NO:40000 枝番:1、5 を指定するとそれらだけを算出する)} ・ レコード検索はB〜E 1レコード がすべてカラのところまで検索する 表)B C D E 案件NO 枝番 貸方 借方 1000 1 100 100 1000 1 50 1000 1 100 1000 3 100 1000 5 100 1000 5 100 1001 1 100 1000 3 100 1001 3 100 100 合計例 案件NO:1000 枝番:1、3、5 選択時 =1000-1:借方-150 貸方200 =1000-3:借方 100 貸方100 =1000-5:借方 100 貸方100 と、言った感じです。よろしくお願いします。 |
>最近システム業界に入社してきた者です。 >「マクロで以下の仕様のものを作って来い」と、言われたのですが >何をどうしていいかわかりません。 これって、チヒロさんの実力を計るためにやらせてみた、ということなのでしょうか? だとしたら、人の力を借りちゃうとあとが辛くなっちゃうかもしれませんね。 それはさておき、とりあえず作ってみました。 >{EX:Msgboxにて「案件NO」指定、次のMsgboxにて枝番を指定 とありますが、Msgboxで案件NOや枝番を指定するのは非常に冗長なので、 UserFormにListBoxを2つ作る方法でやってみました。 UserForm上にListBox1,ListBox2,Combobox1を作成し、 以下のコードをフォームモジュールに貼り付けて お試しください。 (ListBox1,ListBox2のMultiSelectプロパティはfmMultiSelectMultにしてください) Private Sub CommandButton1_Click() Dim i As Integer, j As Integer, k As Long, l As Integer Dim R1 As Range, R2 As Range Me.Hide k = 1 Set R1 = Range("D2", Range("D65536").End(xlUp)) Set R2 = Range("E2", Range("E65536").End(xlUp)) Application.ScreenUpdating = False For i = 0 To ListBox1.ListCount - 1 For j = 0 To ListBox2.ListCount - 1 If ListBox1.Selected(i) And ListBox2.Selected(j) Then Cells(k, "G") = ListBox1.List(i) & "-" & ListBox2.List(j) Call Range("B:C").AutoFilter(1, ListBox1.List(i)) Call Range("B:C").AutoFilter(2, ListBox2.List(j)) If ListBox2.List(j) = 1 Then l = -1 Else l = 1 End If Cells(k, "H").Value = WorksheetFunction.Sum(R1.SpecialCells(xlCellTypeVisible)) * l Cells(k, "I").Value = WorksheetFunction.Sum(R2.SpecialCells(xlCellTypeVisible)) k = k + 1 End If Next Next ActiveSheet.AutoFilterMode = False Application.ScreenUpdating = True End Sub Private Sub UserForm_Initialize() On Error Resume Next Dim R1 As Range, r As Range Dim i As Integer, j As Integer, k As Integer Application.ScreenUpdating = False ActiveSheet.ShowAllData Set R1 = Range("B1", Range("B65536").End(xlUp)) Call R1.AdvancedFilter(xlFilterInPlace, , , True) ListBox1.Clear For Each r In Intersect(R1.SpecialCells(xlCellTypeVisible), Rows("2:65536")) Call ListBox1.AddItem(r.Value, ListBox1.ListCount) Next ActiveSheet.ShowAllData Set R1 = Range("C1", Range("C65536").End(xlUp)) Call R1.AdvancedFilter(xlFilterInPlace, , , True) For Each r In Intersect(R1.SpecialCells(xlCellTypeVisible), Rows("2:65536")) Call ListBox2.AddItem(r.Value, ListBox2.ListCount) Next ActiveSheet.ShowAllData Application.ScreenUpdating = True End Sub PS.メールアドレスを教えてくれれば、作成したサンプルをお送りします。 (封筒マークをクリックして、直メールしてもらってもいいです。) |
チヒロさんこんばんは。 >はじめまして、最近システム業界に入社してきた者です。「マクロで以下の仕様のものを作って来い」 >と、言われたのですが何をどうしていいかわかりません。期限が迫ってきてネットで調べてたら >ここにたどり着きました。どなたか助けていただけないでしょうか?お願いします。 とのことですが、システム業界に入られたということは、どういうレベルでわからない のでしょうか? もしも、流れ図を組めるくらいでExcel用にどういう記述をすればいいかがわからない ということでしたら、こちらのサイト内にあるリンク週などで関数の使い方を紹介して いるサイトなどもありますから、そちらを参考にしてみるといいと思います。 |
おじゃまします。 とりあえず(MsgBox?)InputoBoxで指定するサンプルです。 出力はメッセージボックスにしています。 尚、Split関数とJoin関数を使用しているため、Excel2000以上限定です。 Sub Test() Dim VntANum As Variant Dim VntEb As Variant Dim VntV As Variant Dim VntAR(1 To 4) As Variant Dim strSP() As String Dim strAD As String Dim strMSG() As String Dim lngMcnt As Long VntANum = Application.InputBox("案件No") If VarType(VntANum) = vbBoolean Then Exit Sub If VntANum = "" Then Exit Sub VntEb = Application.InputBox("枝番") If VarType(VntEb) = vbBoolean Then Exit Sub If VntEb = "" Then Exit Sub With Range("A2", Range("A65536").End(xlUp)) VntAR(1) = _ Evaluate("(" & .Address(external:=True) & "=" & VntANum & ")*1") VntAR(3) = Evaluate(.Offset(, 2).Address(external:=True)) VntAR(4) = Evaluate(.Offset(, 3).Address(external:=True)) strAD = .Offset(, 1).Address(external:=True) End With strSP = Split(VntEb, ",") ReDim strMSG(UBound(strSP) + 1) For Each VntV In strSP If VntV <> "" Then VntAR(2) = Evaluate("(" & strAD & "=" & Val(VntV) & ")*1") strMSG(lngMcnt) = VntANum & "-" & VntV & ":借方 " & _ Application.SumProduct(VntAR(1), VntAR(2), VntAR(3)) _ & " 借方 " & _ Application.SumProduct(VntAR(1), VntAR(2), VntAR(4)) lngMcnt = lngMcnt + 1 End If Next VntV MsgBox Join(strMSG, vbLf) Erase VntAR End Sub 的はずれでしたらすいません。 ごめんなさい、あまり学習には不向きなコードかもしれません。 |
▼チヒロ さん: ポンタさん、ゆとさん、Jカーターさん、回答ありがとうございます。 とりあえず、回答のソースをデバック解析して勉強します。 何がなんだか解らないんですけど...地道に。。。。 |