EXCEL2002で住所録を作っています。1冊2~3、000名のものが5~6冊の規模です。データの更新がしばしばあります。番地が23番地の12の203などとなりますが、これを3つのセルに分けて入力してあります。番地1が23、番地2が12、番地3が203です。データの中には番地2と番地3がない(空白)もの、または番地3のみない(空白)ものがあります。
 番地順に並べ替えを実施(優先度:番地1→番地2→番地3)すると、空白のあるデータが下段になります。たとえば「10番地」より「10番地の5」、「10番地の3」の方が上段になります。これに対して空白のあるデータ(「10番地」)の方を上段に持ってきたいと思います。添付画像で左表を右表のように表示したい。
 並び替えの序列では空白(またはスペース)は数字の後となっていますから、一旦はやむ終えないとはおもいますが、なんとか解決策はないでしょうか?
 マクロ(?)などが必要な感じがしますが、マクロを自分では作ったことがない初心者です。よろしくお願いします。

「エクセルで並べ替え:空白を先頭にできませ」の質問画像

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

A 回答 (5件)

住所列として


G2:
=C2&TEXT(D2,"00")&TEXT(E2,"-0;;;")&TEXT(F2,"-0;;;")
のように数式を追加して下向けにコピー,この列の昇順で全体を並べ替えてみます。


実際にあるデータに応じて,少し数式をチューニングした方がベターと思います。
    • good
    • 0
この回答へのお礼

うまくいきました。
”住所列”として町名から番地3までをつなげた文字列(松井23-12-101)を作るわけですね。
文字列にすると、並べ替えの序列は空白の方が文字より上位に来るということですか。
じつはこのデータからWORDへの差し込み印刷をしています。
その時この文字列をそのまま使うことができます。
ありがとうございました。

お礼日時:2011/04/10 01:38

例えばD列に番地1が、Eセルに番地2が、F列に番地3があるとしたら作業列としてG2セルには次の式を入力して下方にオートフィルドラッグします。

その上でG列を選択して昇順で並べ替えをすればよいでしょう。

=IF(D1="","",D1+E1/MAX(E:E)/1000+F1/MAX(F:F)/1000000)
    • good
    • 0
この回答へのお礼

希望通りの並べ替えができました。
1行目がタイトルだったので、はじめは与えられた式をそのままコピーして
エラーがでました。D1をD2などと修正してうまくいきました。
番地2と番地3を”小数点化”して、番地1のあとにくっつけるというもの
のようですが、関数式の内容はまだ十分理解できていません。
ありがとうございました。

みなさん、色々な回答をすばやくお寄せいただきビックリしています。
それぞれなるほどと大変参考になりました。
どうもありがとうございました。

お礼日時:2011/04/10 02:34

添付画像のレイアウトなら、例えば補助列のG列(G2セル)に以下の式を入力し、下方向にオートフィルし、この列を基準に昇順に並べ替えてみてください。



=TEXT(D2,"000")&TEXT(E2,"000")&TEXT(F2,"000")
    • good
    • 0
この回答へのお礼

うまく並べ替えができました。
番地1から番地3のそれぞれを3文字のテキストに変換し、
それらをつなげて9文字とするわけですね。
並べ替え実施の時、「・・・ テキスト形式の数値が含まれて・・・」云々
のダイアログが出て、少しとまどいますが、結果はOKでした。
アドバイスしていただいたこの考え方はいろいろ応用できそうです。
どうもありがとうございました。

お礼日時:2011/04/10 01:59

本来空白であるべきところに0を入力し、0を表示させないようにするのはどうでしょう?



http://www.google.co.jp/search?num=100&hl=ja&rlz …
    • good
    • 0
この回答へのお礼

NO.1の方と同様の考え方ということですが、いろいろな方法があるのですね。
勉強になります。ご紹介くださり、どうもありがとうございます。

お礼日時:2011/04/10 00:50

空白が後になるみたいですね



とりあえず簡単な方法として
白色文字で「0」を入力する方法は如何ですか?
    • good
    • 0
この回答へのお礼

まったく思いつかなかった発想で、びっくりしました。早速テストしました。うまくいきました。
なおこの住所録のデータを使ってハガキにWORDで差し込み印刷をします。そのテスト印刷を
したところ、ゼロが印字されてしまいました。EXCELでの文字の色情報はWORDには渡されない
のですね。残念です。なにか方法はないのでしょうか?
 エレガントな回答をいただきありがとうございました。
 

お礼日時:2011/04/10 00:43

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

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

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

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

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

Qエクセルの並び変えで、空白セルを一番上にもってくる方法を教えてください。

いつもこちらで大変お世話になっています。

エクセルで、ある列を対象に並び替えをする時、空白セルを一番最初にもってきたいのです。

ユーザー設定リストに登録する時に、どのようにしたら良いのでしょうか?

すみませんが教えてください。
よろしくお願いします。

Aベストアンサー

こんにちは。代案です。
ある列がA列の場合、未使用列を作業用に
=ISBLANK(A1)
と入力して、必要行数コピー。
この列をまず降順で最優先キーに指定する。

Q空白セルのあるエクセル表の並び替え

空白セルのあるエクセル表の並び替え

エクセル2002を使用しています。
エクセルの表で空白セルがたくさんあるのですが、
並び替えをしようとすると、行全体ではなく、行の一部しか並び変わってくれません。
空白行も含めて、行全体を並び替えるようにする方法はありますでしょうか?

宜しくお願い致します。

Aベストアンサー

一般的に対象物を選択しないで特定の編集操作をすると(例えばデータ範囲を選択しないで並べ替えやフィルタなどの操作を実行すると)、エクセルが自動的に操作対象(並べ替え)範囲を認識しますが、このとき空白列や空白行があるとその位置までしか認識されません。

確実に並べ替えを行いたい場合は、最初に空白セル(行)を含む並べ替え対象を選択してから、「データ」「並べ替え」で実行してください。

Q【エクセル】Excel2007 並べ替えについて

いつもお世話になります。

エクセル2007で並べ替えをしていますが
うまくできません。

「空白>数字昇順」にしたいのですが
空白セルを無視して 
値が入っているセルのみで
ならべかえられてしまいます。

基本的な質問で申し訳ありませんが
よろしくお願いします。

Aベストアンサー

エクセルの並べ替え機能を使うと、残念ながら、空白は、一番下になります。
簡単なのは、空白に「0」を入れておいて、昇順を使うと上のほうになります。

マクロを使う方法もあるそうですが、その方法は、わかりません。

Qエクセル2003で並べ替えする場合で、空白行を先頭ではなく末尾に表示し

エクセル2003で並べ替えする場合で、空白行を先頭ではなく末尾に表示したい。
IF文で計算結果が「空白」となる計算式が入っているセルを含めて並べ替えした場合、先頭に表示されます。 これを末尾に表示されるようにするにはどうしたら良いのでしょうか。教えて下さい。

Aベストアンサー

限定的に出来る事としては,
手順:
いまスペースが「上」にある状態で,ともかく並べ替えます
実際のデータのセル範囲を選びます
ユーザー設定リストに追加します
 (2003までのエクセルではツールメニューのオプションのユーザー設定リスト)
(2003までのエクセルでは)データメニューの並べ替えを開始し,
  オプションを開き,
  いま登録したリストを指定して,
そして並べ替えさせます。




>並べ替えると

「昇順」で並べ替えると,
数値の昇順 → ”” → 文字の昇順 → エラー値
の順になります。

「降順」で並べ替えると,
エラー値 → 文字の降順 → ”” → 数値の降順
の順で並びます。

特別なオプションで,「文字で記入されているけど数値に読み替え可能」な数字文字列については,数値の並びに入れる事も出来ます。


どんなデータをどっち順で並べたいのかご相談に書かれていませんが,こういった特性を生かしてデータや並び順を作成すれば対応できるかも?しれません。たとえば,""を計算させずNA()などを入れておき,書式によってエラー値が表示されないようにしてみるなどの手立ても可能かも知れません。

限定的に出来る事としては,
手順:
いまスペースが「上」にある状態で,ともかく並べ替えます
実際のデータのセル範囲を選びます
ユーザー設定リストに追加します
 (2003までのエクセルではツールメニューのオプションのユーザー設定リスト)
(2003までのエクセルでは)データメニューの並べ替えを開始し,
  オプションを開き,
  いま登録したリストを指定して,
そして並べ替えさせます。




>並べ替えると

「昇順」で並べ替えると,
数値の昇順 → ”” → 文字の昇順 → エラー値
の順になります。...続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル:シート名を手入力でなく、セル「A1」の文字を出したい。

いつもお世話になります。
エクセルのシート名についての質問です。
いつもはシート名を変えるとき、シートタブの上を右クリックして「変更」しています。

◆そこで、
(1) セル「A1」に入力されてある文字を自動で出す
(2) もしくはマクロボタンを押すと「A1」に入力されてあるものが「シート名」として変わる

というようにしたいのですが、その方法について教えてください。よろしくお願いいたします。

Aベストアンサー

こんにちは。


(1)の場合は、下記のコードを ThisWorkbook に記述してください。
どのワークシートでも機能します。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value
End Sub


(2)場合は、下記のコードを標準モジュールに記述しボタンにマクロ登録してください。
(すべてのシートにボタンを貼り付けるのは面倒でしょうから、ツールバーにボタンとして追加すると良いと思います。)

Public Sub SheetName()
ActiveSheet.Name = Range("A1").Value
End Sub

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QEXCEL VBA で指定した範囲に入力があるかどうか?

こんばんは!!
EXCEL VBAを使い出して、初日からつまずいてます・・・。
みなさん、アドバイスよろしくお願いします!!

で、早速、質問なんですけど、
指定したセル範囲のいずれかに入力があるか調べたいんですけど、それができるプロパティとかってあるんでしょうか?
地道にセル毎にチェックするしかないいんでしょうか??

たとえば、範囲をA1:H1として、その範囲内のセルに何か入力があったらTrueが返ってくるとか・・・。

もし、知ってる方がいらっしゃたら教えてください!!
よろしくお願いします!!!!!

Aベストアンサー

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてしまうんですが、『WorksheetFunction.』と打てば、候補の関数名が表示されると思います。

下記の fnc入力チェック は入力有無を返すユーザー定義関数です。
書き方の例です。分かりやすくなった?この例は引数に"A1:H1"をセットしています。任意の範囲にするには Selection.Address に変えます。

Sub 入力チェック()
  Dim 入力有無フラグ As Boolean        '入力有無の答え

  入力有無フラグ = fnc入力チェック("A1:H1")  'モジュール内でA1~H1を指定(固定)

  MsgBox 入力有無フラグ            '帰ってきた答えをメッセージボックスで確認
End Sub

'入力有無を返すユーザー定義関数
Function fnc入力チェック(checkAddress As String)
  If WorksheetFunction.CountA(Range(checkAddress)) > 0 Then
    fnc入力チェック = True
  Else
    fnc入力チェック = False
  End If
End Function

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてし...続きを読む


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

人気Q&Aランキング