過去ログ

                                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

と、言った感じです。よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:超初心者で困ってます  ■名前 : ポンタ <k_eguchi@anet.ne.jp>  ■日付 : 03/3/12(水) 17:15  -------------------------------------------------------------------------
   >最近システム業界に入社してきた者です。
>「マクロで以下の仕様のものを作って来い」と、言われたのですが
>何をどうしていいかわかりません。

これって、チヒロさんの実力を計るためにやらせてみた、ということなのでしょうか?
だとしたら、人の力を借りちゃうとあとが辛くなっちゃうかもしれませんね。

それはさておき、とりあえず作ってみました。

>{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.メールアドレスを教えてくれれば、作成したサンプルをお送りします。
  (封筒マークをクリックして、直メールしてもらってもいいです。)
 ───────────────────────────────────────  ■題名 : Re:超初心者で困ってます  ■名前 : ゆと  ■日付 : 03/3/12(水) 18:46  -------------------------------------------------------------------------
   チヒロさんこんばんは。
>はじめまして、最近システム業界に入社してきた者です。「マクロで以下の仕様のものを作って来い」
>と、言われたのですが何をどうしていいかわかりません。期限が迫ってきてネットで調べてたら
>ここにたどり着きました。どなたか助けていただけないでしょうか?お願いします。

とのことですが、システム業界に入られたということは、どういうレベルでわからない
のでしょうか?
もしも、流れ図を組めるくらいでExcel用にどういう記述をすればいいかがわからない
ということでしたら、こちらのサイト内にあるリンク週などで関数の使い方を紹介して
いるサイトなどもありますから、そちらを参考にしてみるといいと思います。
 ───────────────────────────────────────  ■題名 : Re:超初心者で困ってます  ■名前 : Jカーター  ■日付 : 03/3/12(水) 20:51  -------------------------------------------------------------------------
   おじゃまします。
とりあえず(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

的はずれでしたらすいません。
ごめんなさい、あまり学習には不向きなコードかもしれません。
 ───────────────────────────────────────  ■題名 : Re:超初心者で困ってます  ■名前 : チヒロ  ■日付 : 03/3/12(水) 21:16  -------------------------------------------------------------------------
   ▼チヒロ さん:
ポンタさん、ゆとさん、Jカーターさん、回答ありがとうございます。
とりあえず、回答のソースをデバック解析して勉強します。
何がなんだか解らないんですけど...地道に。。。。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 870