Access2002でクエリをExcel2002へエクスポートしたのですが、エラーではないのですが、気になることがあります。
なぜか、データの並びが違うのです。なぜクエリの時とExcelシートにした時で勝手にデータが並べ変わっているのか気になって。
一応、過去の質問を調べましたが似た質問を見つけることができなかったので、自分で質問してみます。
ご存知の方がいたら、教えてください。
もし、過去に出ているなら申し訳ないですが、どの質問か教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Accsess のテーブルは(Excel とは異なり)レコードの並び順のデータを持っていません。


したがって、積極的に主キーなどで(例えば #1 の Ribenrenさんがおっしゃっているような方法で)並べ替えをしてやらなければ、どのような順番になるかはまったく保証されません。

Access のテーブル(クエリーも?)をデータシートビューで開いた場合、テーブルに主キーが設定されていればレコードはこの順番で表示されますが、これは単にフィルターがかかっているだけのことで、実際にデータの順番が入れ替わっているのではありません。
ちなみに、主キーがない場合は(フィールドにインデックスを使っていればこの順になりますが)通常は(多分?)入力順で表示されると思います。

ということで、ご質問のエクスポートの際の順番ですが、これはデータが保存されているハードディスク(やMOなどの記録媒体)から読み込まれる順番によると思います。
(つまり、ハードディスクの外周寄りに記録されているレコードから順番にエクスポートされると言うこと。)

ですから、基本的にはデータの入力順でエクスポートされることになりますが、もし Access のデータ領域がハードディスク上で断片化(フラグメンテーション)していたりすると、順番は全く予想できないものになってしまいます。
(データのコピーやハードディスクのデフラグなどで、順番が変わってしまう可能性もありそうです。)

ちなみに、データベースを最適化すると、レコードは主キーの順番に再格納されるようです。
(ハードディスクの連続した領域に、データベースのコピーやテーブルのインポートを行った場合も?)

いずれにしても Access を使う場合には「テーブルには基本的にレコードの順番の概念が無い」ということを常に意識している必要があると思います。

再現のテストを行っていません(意識的に Access のデータに影響するようなフラグメンテーションを作るのって、えらく難しいです。^_^;)ので、「自信なし」の回答ですが・・・・・・。

参考URL:http://www.naboki.net/access/achell/achell_03.html
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。
とてもわかりやすく説明していただき、うれしいです。
そして、参考のURLもとても役に立ちました。

>データが保存されているハードディスクから読み込まれる順番によると思います。

なぞが解けて良かったです。
人に質問されて自分でもわからず悔しかったので(笑。
ありがとうございました。

お礼日時:2003/10/07 16:14

並び順が一意に保証されるような Order By 句を書けばよいのでは?

    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
Order By 句 という言葉を知らなかったためネットで調べました、ありがとうございます。
時間ができたら、それを使ってみようと思います。
ただ、今回質問させてもらったのは、並び替わらないようにする方法を知りたかったのではなく、「なぜ並び替わってしまうのか?」という理由を知りたかったのです。もしご存知の方がいらしたら、お願いします。

お礼日時:2003/10/06 22:08

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qポートの確認について

OS      :WindowsXP HomeEdition
Webサーバ  :apache

上記環境でhttpd.confのPortを確認したところ80番が記述されているのにも関わらず、サーバが動作しているところで、コマンドプロンプトでnetstatを実行してもポート80番が使用されているとは記述がないような気がするのですが、実行するコマンドが違うのでしょうか?それともWebサーバのポートが違うのでしょうか?

Aベストアンサー

実行するコマンドはあっています。オプションが足りません。

netstat -an

上記コマンドを実行した結果、stateの項目がLISTENINGのポートは外部に公開されています。
もし出力結果が多すぎて見難い場合は

netstat -an|more

として下さい。

Q縦並びのデータを横並びにしたい【Excel2003】

Excel 2003 でプロレス技のデータを編集しています。以下の例ではプロレスの3技(European Uppercut,Chop, Ear slap)のデータを例として引用しましたが、編集したいデータ元のプロレス技は500以上あり、手で入力していては膨大です。そこで、データ元の記述の規則性を利用して、数値データをExcelの関数を使って抽出したいです。そこでない知恵を絞っているのですが、どういう方法がベストですか?

手順(1)データ元をコピーして、Excelのワークシートに貼り付ける。European Uppercut が A1に、Minimum damage が A2に、.... Chop がA16に、....
(2)セル E2 に数式 =right(A2,2)を入力し、これをオートフィルでE列を埋める。

こうすることで E列は以下のように規則正しく数値を抽出できました。ここからが問題ですが、ここからこのデータを横にしたいのです。つまり、1,15,8,0,20
1,2,8,0,3
1,4,7,0,0
という形で並べ替えたいのです。
ご助言していただけないでしょうか?

1
15
8
0
ve
ng
ve
ge
er
20
Su



op
1
2
8
0
ve
ng
ng
rt
ss
3
Su



ap
1
4
7
0
ve
ng
ng
ss
on
0
Su



以下に抽出したいデータ元の例を挙げます。
====================================================
European Uppercut
Minimum Damage: 1
Maximum Damage: 15
Attack Bonus: 8
Bleeding %: 0
Required Position: Opening Move
Obtained Position: Standing
Suffered Position: Opening Move
1st Ability: Rage
2nd Ability: Berserker
total Ability: 20
Torna Su



Chop
Minimum Damage: 1
Maximum Damage: 2
Attack Bonus: 8
Bleeding %: 0
Required Position: Opening Move
Obtained Position: Standing
Suffered Position: Standing
1st Ability: Head Start
2nd Ability: Lightness
total Ability: 3
Torna Su



Ear Slap
Minimum Damage: 1
Maximum Damage: 4
Attack Bonus: 7
Bleeding %: 0
Required Position: Opening Move
Obtained Position: Standing
Suffered Position: Standing
1st Ability: Tireless
2nd Ability: Pacification
total Ability: 0
Torna Su

Excel 2003 でプロレス技のデータを編集しています。以下の例ではプロレスの3技(European Uppercut,Chop, Ear slap)のデータを例として引用しましたが、編集したいデータ元のプロレス技は500以上あり、手で入力していては膨大です。そこで、データ元の記述の規則性を利用して、数値データをExcelの関数を使って抽出したいです。そこでない知恵を絞っているのですが、どういう方法がベストですか?

手順(1)データ元をコピーして、Excelのワークシートに貼り付ける。European Uppercut が A1に、Minimum d...続きを読む

Aベストアンサー

ANo.2
です。
indirectをつかわないと、
セルの中身の文字列ではなく、セルのアドレスの文字列が対象となります。
たとえば、A3が"Maximum Damage: 15 "のとき、
indirectでは、"Maximum Damage: 15 "をさして、右2文字は"15"ですが、なければ、A3のアドレス"$A3"になって、右2文字は"A3"です。
やってみればわかるでしょう。

Qどのポートに送信されているか確認する方法

質問させていただきます。

知人のftpサーバにログインして作業を行おうとしたところ、コマンドを実行しても反応がありません。(lsコマンドを実行してもうんともすんとも言わず、しばらくして実行に失敗したメッセージが出る)

こちら側のiptablesをテーブルを停止させた所、正常にコマンドが実行できたので、原因はポートが開放されていない事だと思うのですが、どのポートを開放すれば良いのか見当がつきません。(20,21番ポートを開放しても駄目した。)

どのポートに、データが送信されているか確認する方法は、何か無いものでしょうか。
もしくは、コマンドが実行できない原因など思い当たりませんでしょうか?

ちなみに、こちら側の環境は以下の様になっています。
OS : Fedora Core 6
接続 : 非passive

お手数をおかけします。

Aベストアンサー

FTP ACTIVE MODE による通信(data channel)は、サーバ からコネクションを張ります。

server:20 ── SYN ──> 1024以上:client ●
server:20 <─ SYN+ACK ─ 1024以上:client
server:20 ── ACK ──> 1024以上:client ●

そこで、お手元の環境は「接続 : 非passive」、つまり active ですよね? ということは、少なくともローカル側では ●1, 3way の INPUT は許可しないと自分で自分を拒否することになります。

QACCESS クエリ→フォーム フィルターをかけたデータのみエクスポートしたい

よろしくお願いします。
クエリのデータをフォームで表示し、その時にコンボボックスで表示するデータを指定し抽出・表示しています。([授業名]フィールドのコンボボックスで、指定した授業のみ抽出します)
最終的に抽出したデータを、コマンドボタンでエクスポートできるようにしたいのですが、私の記述方法では「全てのクエリのデータ」がエクスポートされてしまいます。
どのような方法でもいいのですが、指定したデータ([授業名])のみエクスポートする方法はないでしょうか・・・?

*データエクスポートのVBA記述内容*
Private Sub cmdデータ出力_Click()
'名簿データのエクスポート
Dim msg As String
msg = MsgBox("名簿データを出力します。", vbYesNo, "出力確認")
If msg = vbYes Then
'どの場所にデータをエクスポートするか指定
DoCmd.TransferSpreadsheet acExport, , "Q_受講者名簿用", _
"Y:\○○課\住所録データエクスポート場所\" & "受講者名簿【ACCESSより】.xls", True
answer = MsgBox("受講者名簿データを出力しました", vbOKOnly, "データの出力の確認")
cancel = True
End If
End Sub

*ちなみに、フォーム上でフィルターをかけたVBAは*

Private Sub cmd名簿_Click()
Dim stList As String
Dim stFil As String
If combo1 <> "" Then
stFil = "[授業名]='" & combo1 & "'"
End If
Me.Filter = stFil
Me.FilterOn = True
End Sub

よろしくお願いします。
クエリのデータをフォームで表示し、その時にコンボボックスで表示するデータを指定し抽出・表示しています。([授業名]フィールドのコンボボックスで、指定した授業のみ抽出します)
最終的に抽出したデータを、コマンドボタンでエクスポートできるようにしたいのですが、私の記述方法では「全てのクエリのデータ」がエクスポートされてしまいます。
どのような方法でもいいのですが、指定したデータ([授業名])のみエクスポートする方法はないでしょうか・・・?

*データエクス...続きを読む

Aベストアンサー

フォームで絞り込めているのでしょ
だったら同じしぼりこみをするクエリを作るだけです

それともクエリの作り方がわからないということですか?

クエリで授業名フィールドの抽出条件欄に

=Forms!フォーム名!コンボボックス名

と書けばフォームと同じ絞り込みができます

Qscpコマンドでポート22以外で接続する方法

 お世話になっております。sshのscpコマンドでポート22以外で接続する方法をおしてください。
 いろいろ調べてみましたが、ポート変更に関するオプションが見つからず、接続すると標準ポート22に自動的に接続されてしまいます。22に変更して接続すると大丈夫なのですが、できれば任意のポートでscpコマンドを実行したいと思っています。
よろしくお願いします。

Aベストアンサー

-P

http://www.tectia.com/manuals/client-user/61/scpg3.html
http://www.openbsd.org/cgi-bin/man.cgi?query=scp

QEXCELの[データ]→[外部データの取り込み]→[新しいWebクエリ

EXCELの[データ]→[外部データの取り込み]→[新しいWebクエリ]でテキストデータを取り込みたいのですが、ハイパーリンクなどのデータも含め、列に挿入されて取り込まれてしまい、取り込み先の関数データを記載されている列が右に異動されて反映されません。
取り込み先のEXCELの関数を反映させたまま目的のテキストデータを取り込むにはどのようにすればいいのでしょう。

Aベストアンサー

>既存のセルにデータが入り、かつ、既存の計算式を残したい

趣旨が理解できません具体例で表してください

計算式のあるセルとは?
読み込みたいセルとは?

例:
計算式のあるセル B1
データーの読込先 A1
・この場合であれば最初の回答したようにA1セルにデーターを上書きすればよい

例:
既存のsheet内のデーターが必要で挿入正式でのデーター取り込みが必要な場合
・この場合は計算式のあるセルが挿入により移動しても参照先が変化しないような工夫が必要
=INDEX(1:65536,1,1)
どれだけ挿入しても必ずA1セルの内容を参照します

それとも行いたい処理はもっと違うものなんでしょうか?

Qポート135、445がコマンドプロンプトでLISTENING状態

OS:WindowsXP HomeEdition
ウィルスバスター2007(家庭内ネットワーク1、ファイアウォールセキュリティレベル高)を使用しています。
※ WindowsのLAN接続のプロパティから「NetBIOS over TCP/IPを無効にする」に設定、VB2007でも例外ルールのNetBIOS関連は全てチェックを外してあります。また、DCOMも無効にしてあります。

パーソナルセキュリティ研究所のポートスキャン、シマンテックのチェック、Shields up!!等を行ったところ、ポート135・445を含む全てのポートはClosed(一部ステルス)になっていたのですが、
先日コマンドプロンプトでnetstat-a-nを実行したところ、ポート135と445が「LISTENING」状態(これはポートが開いているってことですよね…?)になっていました。

外部からのポートチェックで安全であれば、コマンドプロンプトでLISTENINGであっても大丈夫なのでしょうか…?
検索して調べてみたのですが情報がなく、分かりませんでした;;

また、ポート445に関しては心配なので
「デバイスマネージャー」→「表示」→「非表示のデバイス表示」→「プラグアンドプレイではないドライバ」→「NetBIOS over TCP/IP」→「スタートアップの種類」(システム→無効に設定)→「再起動」
をやってみたのですが、何故かインターネットに繋がらなりました…。

OS:WindowsXP HomeEdition
ウィルスバスター2007(家庭内ネットワーク1、ファイアウォールセキュリティレベル高)を使用しています。
※ WindowsのLAN接続のプロパティから「NetBIOS over TCP/IPを無効にする」に設定、VB2007でも例外ルールのNetBIOS関連は全てチェックを外してあります。また、DCOMも無効にしてあります。

パーソナルセキュリティ研究所のポートスキャン、シマンテックのチェック、Shields up!!等を行ったところ、ポート135・445を含む全てのポートはClosed(一部ステルス)になって...続きを読む

Aベストアンサー

>>「デバイスマネージャー」→「表示」→「非表示のデバイス表示」→「プラグアンドプレイではないドライバ」→「NetBIOS over TCP/IP」→「スタートアップの種類」(システム→無効に設定)→「再起動」

↑それはやらないほうがいいですね。
シマンテックのオンラインスキャンでOKだったんですよね。それでいいのでは。
LISTENING→どこに対して?
当方のもの
Proto Local Address Foreign Address State
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:42510 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1026 0.0.0.0:0 LISTENING
Local Address =自分側
Foreign Address =相手

「ポート135・445を含む全てのポートはClosed(一部ステルス)」
当方では、すべてステルスです。

クローズということは、相手のスキャンに対して応答します。ただし、「このポートにサービスはやっていないよ」という応答ですが。
どうしてすべてステルスにならないのか変ですね。

windows XP SP2だと思いますが、windowsファイアーウォールは、きちんと無効にしていると思いますが、確認しては。

ルーター使用?

>>「デバイスマネージャー」→「表示」→「非表示のデバイス表示」→「プラグアンドプレイではないドライバ」→「NetBIOS over TCP/IP」→「スタートアップの種類」(システム→無効に設定)→「再起動」

↑それはやらないほうがいいですね。
シマンテックのオンラインスキャンでOKだったんですよね。それでいいのでは。
LISTENING→どこに対して?
当方のもの
Proto Local Address Foreign Address State
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:4...続きを読む

QExcelから、ACCESSへデータをエクスポートする

ExcelからACCESSにデータを追加したいのです。

Excelに下記のようなデータがあります。

ExcelのセルA1 xxx-xc
ExcelのセルB1 メーカーズマーク
ExcelのセルC1 バーボン
ExcelのセルD1 5000円

それで下記のコードをExcelに書きました。

Sub データ追加()
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim conStr As String

conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ACCESSの絶対パス"
con.Open ConnectionString:=conStr
rs.Open Source:="M_商品", ActiveConnection:=con, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic

With rs
.AddNew
.Fields("商品コード").Value = Range("A1").Value
.Fields("商品名").Value = Range("B1").Value
.Fields("商品区分").Value = Range("C1").Value
.Fields("単価").Value = Range("D1").Value
.Update
End With

rs.Close
con.Close
End Sub

問題なく作動します。
でもこのコードだと1行しかACCESSへ転記できません。

Sub データ追加()
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim conStr As String

conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ACCESSの絶対パス"
con.Open ConnectionString:=conStr
rs.Open Source:="M_商品", ActiveConnection:=con, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic

With rs
.AddNew

.Fields("商品コード").Value = Range("A1").Value
.Fields("商品コード").Value = Range("A2").Value
.Fields("商品名").Value = Range("B1").Value
.Fields("商品名").Value = Range("B2").Value
.Fields("商品区分").Value = Range("C1").Value
.Fields("商品区分").Value = Range("C2").Value
.Fields("単価").Value = Range("D1").Value
.Fields("単価").Value = Range("D2").Value

.Update
End With

rs.Close
con.Close
End Sub

このように記載すれば、2行転記できますが、
どのように記載すれば、簡単に、3行、4行と転記できるのでしょうか?

また転記するものは、日によって

10行のときもあれば、30行のときもあります。


本当は空白のセルまでに記載したものをACCESSへ転記したいのですが、
どのように記載したらいいのかご教授お願いします。

ExcelからACCESSにデータを追加したいのです。

Excelに下記のようなデータがあります。

ExcelのセルA1 xxx-xc
ExcelのセルB1 メーカーズマーク
ExcelのセルC1 バーボン
ExcelのセルD1 5000円

それで下記のコードをExcelに書きました。

Sub データ追加()
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim conStr As String

conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ACCESSの絶対パス"
con.Open ConnectionString:=conStr
rs.Open Sour...続きを読む

Aベストアンサー

いろいろな書き方がありますが
分かりやすいのはこんな感じ。

Dim i As long

・・・
i = 1
With rs
Do Until Cells(i, 1) = ""
.AddNew
.Fields("商品コード").Value = Cells(i, 1)
.Fields("商品名").Value = Cells(i, 2)
.Fields("商品区分").Value = Cells(i, 3)
.Fields("単価").Value = Cells(i, 4)
.Update
i = i + 1
Loop
End With
・・・

QDOSコマンドでポートから受信

MS-DOSのコマンドでシリアルポートから
データを受信したいのですが
そういったことはできるのでしょうか?
あるならば、そのコマンドを
教えていただきたいのですが・・・。

OSはWindows95以上です。

よろしくお願いします。

Aベストアンサー

こんばんは、Blackwinglsです。

copy con aux
なんてやった記憶が・・・・遥か大昔にあります。
キーボード入力をシリアルポートに出力してたと思います。タブン・・・・・・(^^;)
逆に、
debug < aux
とかすると、debug.exeにデータを落してたような・・・気がします。タブン・・・・・・(^^;)

NECのdos時代にspeedコマンドを使って電話回線越しに知人のpcとデータをやり取りしたような記憶が曖昧ながらも、あります。

以上、回答が付いていないようなので大昔の記憶を浚ってみました。
ここら辺をキーワードにgoogleしてみると、必要な情報に当るかもしれません。

あまり役にたたないアドバイスでゴメンm(__)m

QExcel データの並び替え

以下のようにする方法がないでしょうか?
データベースのようにつかいたのです。
A列にデータをいれるとB列に自動で、
以下のようにならぶようにしたいです。
空白セルを飛ばし上から順番に並べかえたいのですが
方法はないでしょうか?不可能なのでしょうか?
可能でしたらB列にいれる数式、関数をおしえてください。

   A  B  C
1  5  5
2  4  4
3  7  7 
4     1
5  1  3
6
7  3

Aベストアンサー

#01です。データは1行目からあるのでしたね。
式を以下に訂正します。

=IF(ISERROR(SMALL(IF($A$1:$A$7="","",ROW($A$1:$A$7)),ROW())),"",INDEX($A$1:$A$7,SMALL(IF($A$1:$A$7="","",ROW($A$1:$A$7)),ROW())))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング