- ベストアンサー
こんな扱いにくいデータ形式どうにかなりませんか?
データが下記のような形式になっています。 「あいう」「20010629」のデータを合計したいのですが。 345+124+................. あいう, 20010627, 20010627, ,123 20010628, ,234 20010629, ,345 いうえ, 20010627, ,589 20010629, ,987 あいう, 20010629, ,124 なお、日付は同一日付が複数あります。またない日もあります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Excelにデータが入力されていると仮定しています。 場所はA1から行方向で、「あいう,」、「いうえ,」などは前データとは1行開いているとしています。最初の「あいう,」はA1、「20010629,」はA7にあることになります。 VBAでユーザー定義関数を作りました。 =SuchiGokei(A1,A7)のように入力します。 直接文字を入れる場合は =SuchiGokei("あいう",20010629) のように入力します。 ツール→マクロ→Bisual Basic Edotor でVBE画面に移って標準モジュールを挿入し下記マクロを貼り付けて下さい。セルに変更があれば再計算するようにしてあります。 Public Function SuchiGokei(Moji As String, Ymd As String) Dim rg As Range 'データの登録された最初の位置 Dim rw As Long '行カウンタ Dim cMoji As String 'セルにある最初の文字 Dim dt As String 'セルにある日付または数値 Dim OK1 As Boolean '文字が一致したらTrue Dim OK2 As Boolean '日付が一致したらTrue Dim Total As Long '数値の累計 If Right(Moji, 1) <> "," Then Moji = Moji & "," If Right(Ymd, 1) <> "," Then Ymd = Ymd & "," Application.Volatile '自動計算関数にする Set rg = Range("A1") With rg cMoji = .Offset(rw, 0): rw = 0 'ブロックの最初の文字を読む While cMoji <> "" '未入力なら終わり OK1 = False If cMoji = Moji Then OK1 = True '一致した! rw = rw + 1: dt = .Offset(rw, 0) '日付または数値を読む While dt <> "" '未入力ならブロックの終わり Select Case True Case Right(dt, 1) = "," '右にカンマがあれば日付 OK2 = False If dt = Ymd Then OK2 = True '一致した! Case Left(dt, 1) = "," '左にカンマがあれば数値 If OK1 = True And OK2 = True Then Total = Total + Val(Mid(dt, 2)) '合計する End If End Select rw = rw + 1: dt = .Offset(rw, 0) '次の日付または数値を読む Wend rw = rw + 1: cMoji = .Offset(rw, 0) '次のブロックの最初の文字を読む Wend End With SuchiGokei = Total End Function
その他の回答 (3)
- gould09
- ベストアンサー率33% (196/589)
>文字が同一であるものの同じ日付の一行下の数字 >を合計したいのですが。 このレベルでは理解していて、その考えを踏まえてNo.2の回答を書いています。 アルゴリズムを作成する大きな流れのみ書きました。 言語は何か分からないのですが、もっとコーディングレベルの回答を書いた方がいいですか? コメントに書いてもらえれば作成しますが、用事があるので時間が多少かかるかもしれません。
- gould09
- ベストアンサー率33% (196/589)
文字と日付が該当する値の後の数値を集計するアルゴリズムがしりたいのでしたら、 頭からデータを読み込みながら 文字、日付、数値の判断を行って(ここが一番面倒なかんじですね) 決まった文字、日付の後に出てくる数値の集計を行うループを作ってあげれば いいのでは?
補足
説明不足ですみません。 文字が同一であるものの同じ日付の一行下の数字 を合計したいのですが。
- gould09
- ベストアンサー率33% (196/589)
この質問でなに回答してほしいのかよく分からないのですが? データを見た感じでは、 文字、日付、数値 と言う形にまとめればいいと思うのですが、 どうゆう条件の中で何を変えようとしているのかよく分かりません?
お礼
中身はさっぱり理解できませんでしたが、 何回かトライしてみたら出来ました。 なにかとんでもないお手数をお掛けした ようで申し訳ありません。 本を買って意味を理解しようと思います。 ありがとうございました。