質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

7621閲覧

VB.NETでのExcelデータソートが上手くできません

DgRp_08

総合スコア56

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/02/16 23:23

Excelにそれぞれ

  • 項目A(A列)
  • 項目B(B列)
  • 項目C(C列)
  • 項目D(D列)
  • 項目E(E列)

のテーブルがあります。
これを項目C~EをKeyとして昇順にし、「項目C」と「項目D」と「項目E」の組合せが同じものが無いかチェックしたいです。

VB.NETのaspx.vbファイルで以下のようにソート処理を記述していますが上手く行きません。
WebブラウザでExcelファイルをアップロードファイルとして System.IO.FileStreamでReadWriteモードでオープンしてからExcelの中身を見ています。
シート保護がかかっており、処理の最初で解除もしています。
エラー内容「RangeクラスのSortメソッドが失敗しました」

VB.NET

1'変数宣言省略 2wkSheet = xlApp.wkBook.WorkSheets("データシート") 3With wkSheet 4 .Range("C:E").sort( 5 Key1:=.Range("C:C"),order1:=Excel.XlSortOrder.xlAscending, _ 6 Key2:=.Range("D:D"),order2:=Excel.XlSortOrder.xlAscending, _ 7 Key3:=.Range("E:E"),order3:=Excel.XlSortOrder.xlAscending, _ 8 Header:=Excel.XlYesNoGuess.xlYes, _ 9 MatchCase:=False ,_ 10 Orientation:=Excel.XlSortOrientation.xlSortRow) 11End With

また、ソートした後にExcelを閉じる際、保存処理をしなければ中身が変わることはないという認識でおりますが合っていますでしょうか?
バイナリオープンの仕方をするのも初めてでまだ良く分かっておりません。

問題の原因や解決できる記述を教えていただけたら助かります。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

With wkSheetの中を次のように変えればソートできると思います。
ただし以下のコードは項目タイトルを考慮していないため、便宜書き換えが必要です。

VB.NET

1With wkSheet 2 'ソートフィールドをクリア 3 .Sort.SortFields.Clear() 4 5 'ソートフィールドを追加(項目C~EをKeyにする) 6 .Sort.SortFields.Add(Key:=.Range("C:C")) 7 .Sort.SortFields.Add(Key:=.Range("D:D")) 8 .Sort.SortFields.Add(Key:=.Range("E:E")) 9 10 'ソート対象の範囲を指定 11 .Sort.SetRange(.Range("A:E")) 12 13 'ソートを実行 14 .Sort.Apply() 15End With

ソートした後にExcelを閉じる際、保存処理をしなければ中身が変わることはないという認識でおりますが合っていますでしょうか?

保存しなければ中身は変わりません。

投稿2016/02/17 03:47

nabe3

総合スコア345

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DgRp_08

2016/02/27 03:38

回答有り難うございました! 教えていただいた方法は試していないのですが、次の機会に参考にさせていただきます! 返事おそくなりすみませんでした。。
guest

0

エラーの原因は

Orientation:=Excel.XlSortOrientation.xlSortRow ↓ Orientation:=Excel.XlSortOrientation.xlSortRows

の部分ではないでしょうか?

.NETで動作確認とかしたわけではないのではずしていたらすみません。

投稿2016/02/17 01:16

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DgRp_08

2016/02/27 03:37

回答有り難うございました。 手書きで写したものを再度打ち込んでいるのでスペルミス的なものは関係ありませんでした。
guest

0

ベストアンサー

回答ではないのですが、ソート対象の Range は、Range("C:E") ではなくて Range("A:E") でないとまずくないですか。

投稿2016/02/17 00:19

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DgRp_08

2016/02/27 03:36

返事遅くなり申し訳ありません。 仰るとおり、範囲指定がアホでした…! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問