• ベストアンサー

こんな扱いにくいデータ形式どうにかなりませんか?

データが下記のような形式になっています。 「あいう」「20010629」のデータを合計したいのですが。 345+124+................. あいう, 20010627, 20010627, ,123 20010628, ,234 20010629, ,345 いうえ, 20010627, ,589 20010629, ,987 あいう, 20010629, ,124 なお、日付は同一日付が複数あります。またない日もあります。

  • tsufu
  • お礼率27% (41/150)

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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

tsufu
質問者

お礼

中身はさっぱり理解できませんでしたが、 何回かトライしてみたら出来ました。 なにかとんでもないお手数をお掛けした ようで申し訳ありません。 本を買って意味を理解しようと思います。 ありがとうございました。

その他の回答 (3)

  • gould09
  • ベストアンサー率33% (196/589)
回答No.3

>文字が同一であるものの同じ日付の一行下の数字 >を合計したいのですが。 このレベルでは理解していて、その考えを踏まえてNo.2の回答を書いています。 アルゴリズムを作成する大きな流れのみ書きました。 言語は何か分からないのですが、もっとコーディングレベルの回答を書いた方がいいですか? コメントに書いてもらえれば作成しますが、用事があるので時間が多少かかるかもしれません。

  • gould09
  • ベストアンサー率33% (196/589)
回答No.2

文字と日付が該当する値の後の数値を集計するアルゴリズムがしりたいのでしたら、 頭からデータを読み込みながら 文字、日付、数値の判断を行って(ここが一番面倒なかんじですね) 決まった文字、日付の後に出てくる数値の集計を行うループを作ってあげれば いいのでは?

tsufu
質問者

補足

説明不足ですみません。 文字が同一であるものの同じ日付の一行下の数字 を合計したいのですが。

  • gould09
  • ベストアンサー率33% (196/589)
回答No.1

この質問でなに回答してほしいのかよく分からないのですが? データを見た感じでは、 文字、日付、数値 と言う形にまとめればいいと思うのですが、 どうゆう条件の中で何を変えようとしているのかよく分かりません?

関連するQ&A

  • エクセルのデータ形式で画像データというのはあるのでしょうか?

    エクセルで「セルの書式設定」ではセルごとに整数、少数、日付などのデータ形式はありますが画像データそのもののデータ形式はあるのでしょうか? 例えば、作りたいのはセルの 「A1」は「画像1」 「A2」は「画像2」 「A3」は「画像3」 というような感じで作れるのでしょうか? 回答よろしくお願いします。

  • ekcel:連続データ作成

    A列に上から順に下記のように日付データを同一日につき3個(朝,昼,晩のように)作成するにはどうすればいいか。 2006/1/1 2006/1/1 2006/1/1 2006/1/2 2006/1/2 2006/1/2 2006/1/3 2006/1/3 2006/1/3 ~ 2006/1/31 2006/1/31 2006/1/31

  • エクセルに日付型データを貼り付けた時の表示形式が・・・

    Microsoft Access 2000でデータベース(Oracle)を参照し、 日付型のフィールドをコピーしてエクセルに貼り付けると 表示形式が「24-Aug-04」のようになってしまっているのですが、 この表示形式を「2004/08/24」のように変更するには、 データを貼り付けた後にセルを選択して書式の変更をするしか方法がないのでしょうか? 最初に貼り付けた時点で「2004/08/24」の形式にしたいのですが、 貼り付ける前にシート全体を選択して表示形式を変えてしまうと、 日付型以外の項目まで日付形式に変換されてしまいます・・・。 よろしくお願いします。

  • Accessでデータ追加のクエリについて

    「コードNO」(13桁数値)「開始日付」(yyyymmdd形式の数値)「変更日付」(yyyymmdd形式の数値)「終了日付」(yyyymmdd形式の数値)の4つのデータから成るCSVファイルがありまして、そこに毎月同形式の追加のファイルが発生するのです。開始日付はそれぞれで、変更日付・終了日付は初期値が「99991231」です。新規のコードNoについては追加して、重複するものは上書きしていきたいのです。 私はAccess2000を使ってやってみました。テーブルデータにして追加クエリで追加した後、選択クエリでグループ化を使い、「コードNo」をグループ化、「開始日付」はずっと変わらないので取りあえず「最小」、終了は1度しか変わらないのでやはり「最小」、問題は「変更日付」です。度々変わって行くので初期値を除く最大、又は上位2番目の数値というようにしたいのです。そんな設定の仕方が可能でしょうか? まったく別のやり方でも、Accessでなくても(EXCELなら97)良いのでアドバイスをお待ちしてます。

  • 重複データの整理

    アクセス2000を使用。毎日データを分析して抽出されたデータを累積テーブルに追加して蓄積していますが、その日々の抽出されたデータにデータが重複してる場合があります。(これは2種類のコード{日付と企業コード}を重複キーとしているためとおもわれる) 累積された蓄積テーブルから同一日における重複コードを削除する方法を 教えてください。  日付は 20070907、20070908の形式  コードは4桁の整数   例示 20070901  1 20070901  2 20070901  2・・・(消す) 20070901  3 20070901  3・・・(消す)     20070901  4 よろしくお願いします

  • エクセル 毎日の複数のデータを合計して1行にする

    日付と数値が対になったデータが数ヶ月分あり、1日分が1~4行になります(日付=A列、数値=B列)。 数値の累計を折れ線グラフにしたいのですが、1日が複数行になっている所はプロットが垂直に並んでかっこ悪くなってしまいます。 1日分のデータを合計して、1日1行にするにはどうすればいいでしょうか。

  • 日時データの形式について

    いつも大変参考にさせて頂いております。 さて、今回は前任者が退職後に、ある資料を変更したいのですが 「生データ」の内容と、「加工された後のデータ」の内容が合致しておらず苦労しております。 この場所で皆様にお聞きする事は本来ならばおかしい事は充分承知しておりますが、 いかんせん前任者と連絡も取れず時間が無いので苦労しております。 該当のデータは 日付と時刻で    生データ:1209512879 加工後のデータ:2008-04-30 08:47:59 生データから何らかの計算をすると、08/4/30 8:47:59 となると思うのですが、 エクセルの表示形式では解決できませんでした。 皆様のお知恵を拝借できればと思います。 以上 よろしくお願いいたします。

  • グループ化しつつ表示形式を変えたい

    エクセルのピボットテーブルの日付はグループ化すると表示形式を変える事はできないのですか? 図のように年月日でグループ化したのですが 現在「m月d日」で表示されるのを「mm/dd(aaa)」に変える事ってできないのでしょうか? 該当のフィールド(処理日)をダブルクリックして 「フィールドの設定」を出し「表示形式」を「mm/dd(aaa)」に指定しても何も変わりません。 適用されてないようなのですが何か対策はありますか? 元データは2011/10/6 17:04 などなのでグループ化はしたいのです。 グループ化せずに 「フィールドの設定」を出し「表示形式」を指定したら変わりました。 年も複数あるため、日でグループ化すると違う年の同じ日にちが一つになってしまいます。 2007です。ご回答よろしくお願いします。

  • テキスト形式をエクセルで日付形式で読み込みたいのですが

    販売管理ソフトからデータをテキスト形式で出力すると日付部が2004年1月1日であるとすると「2004 1 1」として出力します エクセルで日付形式で読み込もうとすると「20040101」の場合は読み込めるのですが前述の出力では日付として認識してくれませんでした エクセル側の設定で解決する方法が有ればお教え願います

  • Excelで連続したデータの個数を調べる方法

    初めて質問させて頂きます。 現在、下記のような形式のファイルを作成しています。 例 2 2 2 1 1 1 1 1 ある条件式にて1か2のフラグをたてて、それを日付データの横に記述させるようにしています。 一番下が最新のデータになるのですが、ここで2が1に変わってから何個目(何日目)と言うのを得たいのですが(この例だと2が1に変わって5日目)、どのような関数を使えば良いか分かりません。 基本的な質問かもしれませんが、どうぞよろしくお願いいたします。

専門家に質問してみよう