Excel2003を使用し、セルの色で並び替えをする際の
VBAの組み方かプログラムを教えて下さい。

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

A 回答 (3件)

なぜ、CreateObjectとしてるかよく分かりませんが


たぶん、別のEXCELを立ち上げる必要が有るのだろうと言うことにして、

Const xlAscending = 1
Const xlYes = 1

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Set objWorkbook = objExcel.Workbooks.Open("hogehoge.xls")
Set objWorksheet = objWorkbook.Worksheets("Sheet1")

i = 2

Do Until objExcel.Cells(i, 1) = ""
intColor = objExcel.Cells(i, 2).Interior.ColorIndex
Select Case intColor
Case 3
intSortOrder = 4
Case 4
intSortOrder = 1
Case 6
intSortOrder = 2
Case 41
intSortOrder = 3
End Select
objExcel.Cells(i, 3) = intSortOrder
i = i + 1
Loop

objWorksheet.Range("A1:C" & i - 1).Sort Key1:=objWorksheet.Range("C2"), Order1:=xlAscending, Header:=xlGuess
    • good
    • 0

EXCEL2003では標準でセルの色でソートは出来ません。



VBAでやるとしたら
列を挿入し
Public Function GetColorIndex(ByVal r As Range) As Integer
GetColorIndex = r.Interior.ColorIndex
End Function

でファンクションプロシージャを作成し、カラーインデックスを取得
カラーインデックスでソート

例えば
赤 1
黄色2
青 3
でソートするとしたら、
別途テーブルを作成し
VLOOKUPをかませれば好きなようにソートできます。

この回答への補足

Excel2003でセルの色でソートすることができないのは把握しております。
もし、VBAで組めるのであればその記述方法を教えてほしいと思い質問しました。
ウェブ上で下記の記述がありましたが、「intSortOrder」がダメなようで、実行できない状態です。
よろしければ、問題箇所を教えていただけますでしょうか?


Const xlAscending = 1
Const xlYes = 1

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Set objWorkbook = objExcel.Workbooks.Open("ファイル場所")
Set objWorksheet = objWorkbook.Worksheets("Sheet1")

i = 2

Do Until objExcel.Cells(i, 1) = ""
intColor = objExcel.Cells(i, 2).Interior.ColorIndex
Select Case intColor
Case 3 intSortOrder = 4
Case 4 intSortOrder = 1
Case 6 intSortOrder = 2
Case 41 intSortOrder = 3
End Select
objExcel.Cells(i, 3) = intSortOrder
i = i + 1
Loop

補足日時:2011/04/19 15:53
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/04/19 15:44

エクセル2003までは


セルの色は順序というものはない。ColorIndexでやるとしても、それが常識とか一般的でではない。
だからどういう順序だとなる。
やるにしても作業列に色に先後の順序のコードをVBAで一旦作ってその作業列でソートすることになる。
ソートは「セルの値」でやるのが基本。そのことが割ってないのだろうと思う。色をあらわす文字を何処かの列につくり(これならVBAでやれてやさしいかも)、ユーザー設定リストなどを使うことをj考えては。ツールーオプションーユーザー設定リストで赤、黄、緑、青・・・など定義)
質問表現振りからして、本格的にやるのは、質問者にはVBAでは難しすぎるのでは。
ーー
参考
2007以後
条件付書式などが複雑に拡充された。
http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/e …
の終わりの方を見ること。
「セルの色による並べ替え」の項。 これはマイクロソフトがそのようなプログラムを組んだために出来るものだ。
外にはGoogleで「エクセル2007 色でソート」などで照会したらよい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/04/19 15:45

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

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

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

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

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

Q車の色の名前の一覧を探してます!

自動車の色の名前は、ウイニングブルーメタリック、カナリーイエローマイカなど独特なカタカナ名が多いですが、このような名前が一覧になっているようなHPを探しています。ありましたらどなたか教えてください。

Aベストアンサー

ここで探して下さい。

参考URL:http://www.soft99.co.jp/

QExcel マクロ VBA 別シートのセルを検索し、該当するセルの右にあるセルを入力させる方法 s

Excel マクロ VBA 別シートのセルを検索し、該当するセルの右にあるセルを入力させる方法

sheet『品名マスタ』にはA列に№、B列に商品名があります。sheet『一覧』のB列7行目以降に№が入っています。
※この№が重複することはありません。

『一覧』B列7行目以降にある№で『品名マスタ』A列の№を検索し、該当する『品名マスタ』B列の商品名を『一覧』のC列7行目に反映する。
『一覧』B列の№が空欄の場合は何も入れない。

という処理のボタンをつけたいのですが、どなたか詳しい方ご教授いただけないでしょうか?
(OS:Windows7 Excel:2010を使用しております。)

Aベストアンサー

こんにちは。
以下を試してみてください。

>処理のボタンをつけたい
マクロ名は任意です。Match関数を利用しています。

'//
Sub Button1_Click()  '←ここは任意
Dim c, i
Dim Sh1 As Worksheet: Set Sh1 = Worksheets("一覧")
Dim Sh2 As Worksheet: Set Sh2 = Worksheets("品名マスタ")
With Sh1
 For Each c In .Range("B7", .Cells(Rows.Count, 2).End(xlUp))
  If IsNumeric(c.Value) Then
   i = Application.Match(c.Value, Sh2.Columns(1), 0)
   If IsNumeric(i) Then
    c.Offset(, 1).Value = Sh2.Cells(i, 2).Value
   End If
  End If
 Next c
End With
End Sub

-----------
この種の質問では定番ですが、イベント・ドリブン型マクロがありますので、それも加えておきます。一覧のB列に数字を入れると、自動的に商品名が出てきます。Vlook関数とは似ていますが、違うのは、数字を消すと、右隣のセルの内容も消えます。

'//シートモジュール(シートタブを右クリック、コードの表示)

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim i As Variant '数値型ではありません
 Dim buf As String
 Dim Sh1 As Worksheet: Set Sh1 = Worksheets("品名マスタ")
 If Target.Count > 1 Then Exit Sub
 With Target
 If .Column <> 2 Then Exit Sub
 If .Row < 7 Then Exit Sub
 '数字を削除すると、隣の文字が消える
 If .Value = "" Then Target.Offset(, 1).ClearContents: Exit Sub
  If IsNumeric(.Value) Then
   i = Application.Match(.Value, Sh1.Columns(1), 0)
   If IsNumeric(i) Then
    buf = Sh1.Cells(i, 2).Value
    Application.EnableEvents = False
    .Offset(, 1).Value = buf
    Application.EnableEvents = True
    buf = ""
   End If
  End If
 End With
End Sub

こんにちは。
以下を試してみてください。

>処理のボタンをつけたい
マクロ名は任意です。Match関数を利用しています。

'//
Sub Button1_Click()  '←ここは任意
Dim c, i
Dim Sh1 As Worksheet: Set Sh1 = Worksheets("一覧")
Dim Sh2 As Worksheet: Set Sh2 = Worksheets("品名マスタ")
With Sh1
 For Each c In .Range("B7", .Cells(Rows.Count, 2).End(xlUp))
  If IsNumeric(c.Value) Then
   i = Application.Match(c.Value, Sh2.Columns(1), 0)
   If IsNumeric(i) Then
    c.Offset(, 1)...続きを読む

Qファイル一覧の項目の色について

ディスクを開くとフォルダゃファイルの一覧が表示されますが、この一覧の各項目名というか表題というか、この表示される名前に色はつけられないものなのでしょうか、色分けできればわかりやすいので、教えていただきたいのですが。

Aベストアンサー

explorerだけではできそうにない。
いろいろなツールがフリーソフトである。


たとえば、
http://homepage3.nifty.com/pyxis/

QEXCEL VBA 並び替えについて

こんばんは。

EXCEL VBAでデータの並び替えを作りましたが、実行すると実行時エラー(1004)となってしまいます。原因を探りましたが分からないため、問題点のご指導をお願いします。

・1行目はタイトル行で、2行目以降にデータが入っております(現在は200行までデータが入っています)。。
・A1~T1にタイトルのそれぞれの項目が入っています。
・D1セルに「商品名のカナ」が入っており、カナで並び替え(昇順)をしたいと思っています。

'データの最終行をEndrowに格納する
EndRow = Worksheets("基礎データ").Range("A1").End(xlDown).Row

Worksheets("基礎データ").Select
Worksheets("基礎データ").Range(Cells(1, 1), Cells(EndRow, 20)).Select
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal

プロシージャの一部を抜粋しました。
Selection.Sort Key1~以降の記述は、「マクロの記録」で記録したものを貼り付けました。

よろしくお願いします。

こんばんは。

EXCEL VBAでデータの並び替えを作りましたが、実行すると実行時エラー(1004)となってしまいます。原因を探りましたが分からないため、問題点のご指導をお願いします。

・1行目はタイトル行で、2行目以降にデータが入っております(現在は200行までデータが入っています)。。
・A1~T1にタイトルのそれぞれの項目が入っています。
・D1セルに「商品名のカナ」が入っており、カナで並び替え(昇順)をしたいと思っています。

'データの最終行をEndrowに格納する
EndRow = Worksheets("基礎データ...続きを読む

Aベストアンサー

Windows XP SP3, Excel 2003で試してみました。
その結果、「実行時エラー '1004':」が出る2つのケースがありました。

1.プロシージャが「基礎データ」以外のシートモジュールにある
この場合は「アプリケーション定義またはオブジェクト定義のエラーです。」というメッセージになります。
原因は、シートモジュール内でワークシートオブジェクトを省略した場合に、アクティブなシートではなくそのモジュールのシートが採用されるというところにありました。
対策の1つとしては、シートモジュールには他のシートを扱うコードは置かない、というのがありますし、私もそうしています。
でも、根本的対策としてはオブジェクトをきちんと指定するのが一番です。
今回は以下のようにしたところエラーは出なくなりました。

EndRow = Worksheets("基礎データ").Range("A1").End(xlDown).Row

Worksheets("基礎データ").Select
Worksheets("基礎データ").Range(Worksheets("基礎データ").Cells(1, 1), Worksheets("基礎データ").Cells(EndRow, 20)).Select
Selection.Sort Key1:=Worksheets("基礎データ").Range("D1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal

メンテナンス性を考えるとWithステートメントあるいはワークシートオブジェクト型変数を使った方がよさそうです。
また、他のブックと併用する場合など、ブックも指定したほうがいいこともあります。。

2.並べ替えるセル範囲にセルの結合がある
この場合、プロシージャが標準モジュールにあるなら「この操作には、同じサイズの結合セルが必要です。」というわかりやすいメッセージが出ますので、おそらく質問者様はこの質問を立てるまでもなく解決されることと思います。
それ以外のモジュールの場合は「アプリケーション定義またはオブジェクト定義のエラーです。」という通常のメッセージでした。

Windows XP SP3, Excel 2003で試してみました。
その結果、「実行時エラー '1004':」が出る2つのケースがありました。

1.プロシージャが「基礎データ」以外のシートモジュールにある
この場合は「アプリケーション定義またはオブジェクト定義のエラーです。」というメッセージになります。
原因は、シートモジュール内でワークシートオブジェクトを省略した場合に、アクティブなシートではなくそのモジュールのシートが採用されるというところにありました。
対策の1つとしては、シートモジュールには他のシ...続きを読む

Q「名前をつけて保存」のデフォルト表示形式を「一覧」以外に変えられますか?

MS-Office以外のアプリケーションで「名前をつけて保存」を選択した際の、
ダイアログウィンドウ内の表示形式を変えられますか?

「詳細」「一覧」「アイコン表示」「並べて表示」「縮小版」
などの選択肢を一定のものに変えたいのです。
(現状では、毎回「名前をつけて保存」を開くたびに「一覧」表示に戻ってしまうようです)

OSはWindows-XPです。

Aベストアンサー

Windows標準の機能(フォルダオプションなど)では出来ませんが
http://okazaki.incoming.jp/matatabi/
のFasieと言うフリーSOFTを使えば出来ます。

http://okazaki.incoming.jp/danpei2/software/fasie.htm
http://pasokoma.jp/39/lg390467#390654

QEXCEL VBA 1つのセル内の文字に複数色の色指定について

すいませんがEXCEL2013 VBAについてお教えください。
FOR-NEXT等の繰り返し分を使用し一つのセル内の文字に交互に黒赤黒赤と色を塗るVBAを作りたいと考えています。

処理例
※説明用にだいぶ簡略化した記載に直しましたがこんな感じの処理を考えています。


●1回目処理 A1セル
【A】5【B】6
BBBBBBBRRRRRR
※B←黒色R←赤色という意味合いです。

Range("A1").Value = "【A】5"
Range("A1").Value = Range("A1").Value & "【B】6"
Range("A1").Characters(Start:=5, Length:=4).Font.ColorIndex = 3 '文字色赤


●2回目処理 A1セル
【A】5【B】6【C】7
BBBBBBBBBBBBBBBBBBB
※B←黒色
Range("A1").Value = "【A】5"
Range("A1").Value = Range("A1").Value & "【B】6"
Range("A1").Characters(Start:=5, Length:=4).Font.ColorIndex = 3 '文字色赤
Range("A1").Value = Range("A1").Value & "【C】7"
Range("A1").Characters(Start:=9, Length:=4).Font.ColorIndex = 1 '文字色黒


1回目は問題なく黒赤と色が塗られます。
2回目の処理を行うと全部黒になってしまいます。

セル内の文字に黒赤黒赤と交互に文字色を塗ることはできないでしょうか。
お手数をおかけしますが考え方だけでもお教えいただけると幸いです。
よろしくお願いします。

すいませんがEXCEL2013 VBAについてお教えください。
FOR-NEXT等の繰り返し分を使用し一つのセル内の文字に交互に黒赤黒赤と色を塗るVBAを作りたいと考えています。

処理例
※説明用にだいぶ簡略化した記載に直しましたがこんな感じの処理を考えています。


●1回目処理 A1セル
【A】5【B】6
BBBBBBBRRRRRR
※B←黒色R←赤色という意味合いです。

Range("A1").Value = "【A】5"
Range("A1").Value = Range("A1").Value & "【B】6"
Range("A1").Characters(Start:=5, Length:=4).Font.ColorIndex = 3 ...続きを読む

Aベストアンサー

シートモジュールの画像を添付しておきます。参考にどうぞ!

QAccessで指定する色数値の一覧ありませんか?

MsAccess 2002でフォームを作成しているのですが、フォームの色指定に使える色数値の一覧表はどこかにありませんでしょうか?

VBAを使いRGB関数で指定しても期待したとおりの色を取得することができません。
Accessで使用できる色数値の一覧を参照できるページなどご存知の方いらっしゃいましたらよろしくお願いします。

Aベストアンサー

#1です。先程のページの最後に「このホームページで表示している色は近似色です。正確な色ではありませんので御注意下さい。」と書いてありますので、もしかしたらうまく同じ色が出ないかも知れないですね。
とりあえずカラーチャートのリンク集がありましたので見てみて下さい。
http://www2u.biglobe.ne.jp/~color/all/l_02a_chart.htm

参考URL:http://www2u.biglobe.ne.jp/~color/all/l_02a_chart.htm

Q[Excel VBA 2003]VBA上でVlookupする方法

レンジ内に特定の文字列が存在するかをVBA上で判定したいのですが
VBA上ではVLookUpが使用できません。VBAでVLookUpのかわりとなる
関数または方法はありますか?

Aベストアンサー

"WorksheetFunction."を頭につけると大抵の関数は使えます。

たとえばA1~A7から文字列"b"を探して対応するB列のテキストまたは値を返す場合、
WorksheetFunction.VLookup("b", Range("a1:b7"), 2, 0)

ただしたまに使えないのもあります。LENBなんかはこの方法で使えないくせにVBA関数で用意されているLENBはエクセルワークシート関数と意味が異なっていて、結局自力で(ユーザー定義関数で)定義するしかなかった記憶があります。

Q一覧にある名前に該当する名前を赤くしたいのですが…

こんばんわ、いつもお世話になっています。

Excelのシートで
「シート1」に名前一覧を作り、「シート2」に名前を入れていくと「シート1」に名前がある人を入力すしたとき入力した文字を赤くしたり太字させることは可能ですか?

Aベストアンサー

Sheet1のA列を全て選択して、挿入-名前-定義で適当な名前を付けます。(例 リスト)
Sheet2のA列を全て選択して、書式-条件付き書式で「数式が」にして

=NOT(ISERROR(MATCH(A1,リスト,0)))

と入力し、書式を設定します。

これで希望のようになりますか?

Q[Excel97]VBA:セルに入っている数式を別のシートのセルに文字列としてセットする

「ExcelVBAマクロ500連発」という技術評論社の本(青のカバー)のNo.277に
「式を文字列として表示する」というサンプルマクロがあります。
「ワークシートのセルに入っている数式を、(同じシート内の)別のセルに文字列としてセットする」
ここのコードを参考にして、
「数式を、(同じブック内の別のシートの)セルに文字列としてセットする」コードを考えています。
以下のコードを作りましたが、実行すると最後から2行目の「.Formula」のところで

実行時エラー1004:'Range'メソッドは失敗しました。'_Global'オブジェクト

というエラーが出てきます。なぜでしょうか?
正しいコードの記述を教えて下さい。

(Sheet1のD3セルの計算式をSheet2のD10セルに文字列としてセット)
Option Explicit
Dim 調査セル As Variant
Dim 報告セル As Variant

Sub 式の抽出()
Worksheets("Sheet2").Select
調査セル = Worksheets("Sheet1").Cells(3, 4)
報告セル = "D10"

Range(報告セル).Value = ""
Range(報告セル).Value = "'" + Range(調査セル).Formula
End Sub

「ExcelVBAマクロ500連発」という技術評論社の本(青のカバー)のNo.277に
「式を文字列として表示する」というサンプルマクロがあります。
「ワークシートのセルに入っている数式を、(同じシート内の)別のセルに文字列としてセットする」
ここのコードを参考にして、
「数式を、(同じブック内の別のシートの)セルに文字列としてセットする」コードを考えています。
以下のコードを作りましたが、実行すると最後から2行目の「.Formula」のところで

実行時エラー1004:'Range'メソッドは失敗しました。...続きを読む

Aベストアンサー

こんなややこしいことをせずとも、たった1行
Sub 式の抽出()
  Sheet2.Range("D10").Value = "'" & Sheet1.Range("D3").Formula
End Sub

って書けばいいですよ。


お書きになったVBAでの間違いは、文字列とオブジェクトを混同しているところにありますね。
これを正しく書き直すとすると、以下のようになります。

Option Explicit

'変数の宣言
Dim 調査セル As Range 'Rangeオブジェクト(セルの内容等にアクセスする為のオブジェクト)
Dim 報告セル As String '文字列

Sub 式の抽出()
 'Sheet2をアクティブにする
 Worksheets("Sheet2").Select
 
 '調査セルにはSheet1のD3のセルを割り当てる。
 '「調査セル」を通じて、このセルの文字列、式、色情報etcを取得できる。
 Set 調査セル = Worksheets("Sheet1").Cells(3, 4)
 
 '「報告セル」という文字列方変数に「D10」という文字列を代入する。
 報告セル = "D10"
 
 'アクティブなワークシート(Sheet2)の「D10」というセルの値に空文字列を代入する。
 Range(報告セル).Value = ""
 
 '調査セルのFormula(式の内容)属性を取得して、その値を代入する。
 Range(報告セル).Value = "'" + 調査セル.Formula
End Sub

こんなややこしいことをせずとも、たった1行
Sub 式の抽出()
  Sheet2.Range("D10").Value = "'" & Sheet1.Range("D3").Formula
End Sub

って書けばいいですよ。


お書きになったVBAでの間違いは、文字列とオブジェクトを混同しているところにありますね。
これを正しく書き直すとすると、以下のようになります。

Option Explicit

'変数の宣言
Dim 調査セル As Range 'Rangeオブジェクト(セルの内容等にアクセスする為のオブジェクト)
Dim 報告セル As String '文字列

Sub 式の抽出()...続きを読む


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

人気Q&Aランキング

おすすめ情報