[Excel ADO]ソートキー値の変更方法

このQ&Aのポイント
  • Excel2007を使って、ADOによるCSVデータの集計をしています。対象のデータで、行番号をキーにしてソートする方法はありますか?
  • 0の場合のみ一番最後になるような方法はありますか?素人考えでは、0の場合は999999など十分大きな値に強制的に書き換え、それからORDER BY 行番号による並び替えができれば、などと妄想しています。
  • 売上データのフィールドが伝票日付、伝票番号、明細番号(行番号)と並んでおり、基本的にはこの順番でORDER BYをかければいいのですけど、締時消費税のみ伝票番号が0、明細番号が0となっているのです。普通に処理すると締日の売上データが、締時消費税の下に来てしまうので避けたいです。何かいい方法がありましたら教えてください。
回答を見る
  • ベストアンサー

[Excel ADO]ソートキー値の変更方法

Excel2007を使って、ADOによるCSVデータの集計をしています 対象のデータで、行番号をキーにしてソートするのですが 0の場合のみ一番最後になるような方法はありますか? 素人考えでは、0の場合は999999など十分大きな値に強制的に書き換え、 それからORDER BY 行番号による並び替えができれば、などと妄想しています 参考までに、もう少し具体的に申し上げますと、売上データのフィールドが 伝票日付、伝票番号、明細番号(行番号)、、、と並んでおり 基本的にはこの順番でORDER BYをかければいいのですけど、 締時消費税のみ伝票番号が0、明細番号が0となっているのです(伝票日付は締日) 普通に処理すると締日の売上データが、締時消費税の下に来てしまうので避けたいです 何かいい方法がありましたら教えてください

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは ORDER BY CASE文 で行番号=0の場合は999999、以外は行番号 としてみてはどうですか?

hzd00430
質問者

お礼

CASE文はうまくいかなかったのですが、 ORDER BY IIF(行番号=0,999999,行番号) とすることで、無事解決しました 本当にありがとうございました!

関連するQ&A

  • [Excel ADO]条件にマッチした伝票の出力

    Excel2007 ADOを使ってCSVのSQL処理をしています 対象は売上伝票で、取引先名、商品名などで検索をかけるのですが その結果がマッチした明細のみしか取り出せないのをなんとかしたいです 例えば、1つの伝票には複数明細が含まれるのが通常ですが、 商品名で検索すると、その商品の明細しか出てきません これを、マッチした明細を含む伝票全体を取り出したいのです SELECT 伝票日付,伝票番号 FROM T_売上 WHERE 取引先="A社’ AND 商品名='鉛筆' GROUP BY 伝票日付,伝票番号 こんな形で検索対象を含む伝票の伝票番号リストを得ることはできたので、 次はこの日付と番号でWHEREをかけるのか あるいはEXSISTSなどを使うのか ちょっと具体的にイメージできません 教えていただけるとありがたいです よろしくお願いします

  • [Excel ADO]合計額の挿入は可能ですか?

    Excel2007のADOを使ってCSVファイルのデータを集計する方法を習得中です ある業務アプリからエクスポートしたデータなのですが、 売上伝票データ: 伝票日付、伝票番号、取引先名、明細番号、商品名、数量、単価、金額、取引区分、納入先コード 納入先コードテーブル: 納入先コード、納入先名 取引区分が0なら売上、1なら入金(入金伝票の場合納入先コードがNULL) これを集計して売上明細表をつくるとして、 伝票毎に伝票合計額、および納入先名を挿入するようなことが SQL文だけで可能でしょうか?

  • [Excel ADO] WITH句の可否

    Excel2007のADOを使ってCSVファイルのデータを集計する方法を習得中です http://okwave.jp/qa/q9081610.htmlで質問させていただきました内容で、 uriage.csv 伝票日付,伝票番号,取引先名,明細番号,納入先コード,商品名,単位,数量,単価,金額,取引区分 270901,00000664,X社,1,0071,商品A,個,4,2250,9000,1 270901,00000664,X社,2,0071,商品B,個,4,1750,7000,1 270901,00000664,X社,3,0071,消費税,,0,0,1280,2 270903,00000739,X社,1,0067,商品C,式,1,0,0,1 270903,00000739,X社,2,0067,商品D,個,1,0,0,1 270915,00000360,X社,1,,振込,,0,0,4320,0 270915,00000363,X社,1,,振込,,0,0,78840,0 270915,00000363,X社,2,,振込,,0,0,135540,0 271022,00000831,Y社,1,0090,商品B,式,1,10000,10000,1 271022,00000831,Y社,2,0090,消費税,,0,0,800,2 271022,00000832,Y社,1,0144,商品D,個,1,2000,2000,1 271022,00000832,Y社,2,0144,消費税,,0,0,160,2 271105,00000447,Y社,1,,振込,,0,0,2160,0 271110,00000459,Y社,1,,振込,,0,0,10800,0 nonyu.csv 納入先コード,納入先名 0067,本社 0071,M支店 0084,N支店 0090,本社 0109,S支店 0144,T支店 というテーブルに対して、以下のようなSQLを発行することで、VBAによらずSQLのみで処理することができるようになりました(実際はもう少し複雑なSQLですが、質問に際して簡略化しました) Sub sqltest() Dim cn As ADODB.Connection Dim rs As Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ActiveWorkbook.Path & ";" & _ "Extended Properties='Text;HDR=YES'" cn.CursorLocation = adUseClient Sql = "SELECT * FROM ( " Sql = Sql & "SELECT 明細番号,伝票日付,伝票番号,商品名,単位,数量,単価,IIF(取引区分>0,金額),NULL,IIF(取引区分=0,金額) FROM uriage.csv 売上" Sql = Sql & " UNION ALL " & _ "SELECT 0,伝票日付,伝票番号,取引先名,NULL,NULL,NULL,NULL,NULL,NULL FROM uriage.csv 売上" & _ " GROUP BY 取引先名,伝票日付,伝票番号" Sql = Sql & " UNION ALL " & _ "SELECT 99,伝票日付,伝票番号,'納入先: ' & 納入先名,NULL,NULL,NULL,NULL,SUM(金額),NULL FROM uriage.csv 売上" & _ " LEFT JOIN nonyu.csv AS 納入先台帳 ON 売上.納入先コード=納入先台帳.納入先コード" & _ " WHERE NOT ISNULL(売上.納入先コード) " & _ " GROUP BY 取引先名,伝票日付,伝票番号,納入先名" Sql = Sql & ") ORDER BY 伝票日付,伝票番号,明細番号" Set rs = cn.Execute(Sql) Range("A2").CopyFromRecordset rs End Sub 一応できたことはできたのですが、データが大量になってくるとSELECT文を3回発行しているためかレスポンスが非常に悪くなってしまっています(上記では、全データを対象にしていますが、実際はWHEREにより日付、取引先名、納入先名などで絞り込んでいます。これを3回やるのは目に見えて無駄とは思うのです) 高速化の方策をいろいろ検索してみましたところ、UNIONで繋げるのは愚策で、共通するSQL文をWITH句でまとめるのが良いという記事がありました しかし、WITHを使おうとしてもエラーとなってしまいます。Excel ADOでは使えないのでしょうか? あるいは、まったく異なるアプローチなど、何かありましたらご示唆ください。 よろしくお願いします

  • N:Nのデータの結合について

    お世話になります。 エクセルにて記録がされている会計仕訳データを アクセスにて取り込み結合を行いたいのですが、 うまく結合ができず、困っております。 お忙しいところ申し訳ありませんが、宜しくお願い致します。 【行いたい事】 日付 2004/4/1 伝票番号 1     売掛金100/ 売上105   消費税  5 【現状】 日付 2004/4/1 伝票番号 1 売掛金100/ 売上105 消費税  5/ 売上105 → この部分が不要 借方と貸方でテーブルをもつ、伝票番号と日付で クエリの結合を行っております。 また、伝票番号は、例のように同じものが 複数ありますので、日付もキー項目になります。 例 伝票番号 日付    1   2004/4/1    1   2004/5/1 この場合、売上が2つでてしまい(本来1つ) たぶん、テーブルの作成の方法とリレーションの 仕方が悪い為に、うまくいかないと思います。 記入例ではN:1になっておりますが、N:Nのパターンも あります。 環境は、OS:WinXPpro アクセス2003です。 お忙しいところ申し訳ありませんが、宜しくお願い致します。   

  • ACCESSでテキストデータから伝票データにしたいのですが教えて下さい。

    ACCESS2003でテキストデータをテーブルにインポートしたのですがこのデータを3行毎に伝票番号を変更したデータの作り方がありましたら教えて下さい。よろしくお願いします。 例(テキストデータ5行の場合) 伝票番号1行番号1明細1 伝票番号1行番号2明細2 伝票番号1行番号3明細3 伝票番号2行番号1明細4 伝票番号2行番号2明細5

  • この考え方に問題はありませんか?

    初めて投稿します。 よろしくお願いいたします。 締日に関しての質問です。 社員30名の会社ですが 決算5月末 売上が月末締 経費も月末締 給与と福利厚生費、減価償却費は20日締めです。 期初は6/1なのですが、現時点で言いますと売上は 6/1-9/30までの3カ月分計上されていて、給与他は 6/1-9/20まで計上されています。(決算5月時に10日分 の未払伝票をあげておいて、6月に逆仕訳で相殺) 9月の伝票を締めオフコン帳票を出力したところ、 例年より同年累計利益が、かなり利益が大きくなってしまいました。どういう経緯があったかは分かりませんが 今期から売上の締日を 20日締から月末締に変えたのが原因でした。 それなら売上の締めを20日締に戻せば良さそうなもの ですが、営業サイドは売上は末締めを希望しています。 (今までは21日-31日分、1日-20日分で2枚の伝票を書いていたのですがこれが面倒だということで、1-31で伝票を1枚起票するようになった) それと取引先の手前もあり、今更20日締めに戻すのは 難しそうなのです。 そこで案なのですが、決算時と同様に 1.9/21-9/30の給与等の未払伝票  を9月日付で入力 2.10月日付でその逆の給与等の戻し入れ  伝票を入力 3.10/25に通常の給与等の伝票を入力 4.10/21-10/31の給与等の未払伝票を入力 毎月この作業を繰り返し給与等も1-31分で計上する 方法を考えました。 ベストな方法ではないかもしれませんが、 売上の締日を変えられない以上、面倒でも、きちんとこの作業やり、売上との計上日数を合わせて利益をつかんでおくべきかと思うのですが。いかがでしょうか。 よろしくお願いいたします。

  • 伝票単位の消費税計算について

    消費税計算について、 今まで伝票単位ということで、明細行数にかかわらず 例えば100行でも1枚として消費税計算していました。 ある得意先について、6行ごとの伝票を使用しているので 6行ごとに消費税を計算して欲しいといわれました。 100行を6行ごとに分けるのは大変なので、同じ伝票 として取り扱いたいのですが、無理やり頁単位で6行毎の 消費税計算は問題ないのでしょうか? よろしくお願いします。

  • ピポットテーブル

    ピポット初心者です。 下記のようなデータをピポットテーブルで作る場合 ページのところには、締め日、行には得意先名、データ行には、売上金額を入れるとします。 売上金額は税抜きなので、消費税込(小数点以下切り捨て)の金額も出そうと思うのです。その場合、売上金額を日付ごとに計算させた場合と 得意先毎に合計を出した場合の消費税は当然違いますよね。 出来れば、得意先毎に合計したあとで得意先の合計を出したいのですが・・・どうすればよいでしょうか? 宜しくお願いします。 得意先名 売上日 締め日 売上金額   A   5/13  20   2111   B   5/09  31   2153   B   5/10  31   3865   B   5/11  31   9857   B   5/12  31   8552   B   5/13  31   2000

  • access2003 複数のフォームから入力したデータに通し番号を付けてストックしたい

    初心者の恥ずかしい質問かもしれないので申し訳ありませんが、自力で解決できないのでアドバイスをお願いします。 伝票入力画面を作っています。  ◆親)売上入力フォーム:売上管理番号/日付/取引先/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 伝票が数種類あるため、それぞれの伝票を画像として取り込んで複数の入力画面を作り、入力しやすくしようと思っています。 このとき、各フォームから入力したデータを、オートナンバーでひとつの売上入力/明細テーブルにストックしていくにはどうしたらよいでしょうか? よろしくお願いします。

  • [AC2k]レポートの詳細が逆に。。。

    Access2000のレポートについて、教えてください。 ---- フォーム:F_売上伝票,F_売上伝票明細 (伝票番号をキーにしてサブフォームにしています。) テーブル:T_売上伝票,T_売上伝票明細 クエリー:Q_売上伝票出力 レポート:R_売上伝票出力 ---- [F_売上伝票](F_売上伝票明細)で入力したデータは、 [T_売上伝票] 伝票番号| 売上日付 |顧客コード|・・・ ----+-----+-----+---   1001|2001/07/16|T20111  |・・・ [T_売上伝票明細] 伝票番号|商品コード|・・・ ----+-----+---   1001|1021   |・・・   1001|5545 |・・・   1001|3222 |・・・    1001|4665   |・・・  レポートのソースであるクエリーの結果は [Q_売上伝票出力] 伝票番号| 売上日付 |顧客コード|商品コード ----+-----+-----+-----   1001|2001/07/16|T2001 |   1021   1001|2001/07/16|T2001 |   5545   1001|2001/07/16|T2001 |   3222   1001|2001/07/16|T2001 |   4665 と素直に出てくれるのですが、 レポートの結果(詳細セクション)は 商品コード ----- 4665 3222 5545 1021 となってしまいます。 クエリーでソートしている訳でもありません。 お客様のご都合で、 ・商品コード順にソートする というクエリーは不可です。 レポートが、クエリー通りに出てくれる方法は 無いでしょうか? レポートを作り直したら出来るかもしれませんが、 原因を掴みたいので、ご教授願います。 よろしくお願い致します。 #プロポーショナルフォントは面倒です(;_;)

専門家に質問してみよう