Excelで列の表示をしないを使用したときに、表示されているデータだけに自動連番を付ける方法を教えてください
よろしくお願いします

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

A 回答 (4件)

こんにちは!



>Excelのフィルタを利用すると選択データ(数値・文字)だけが表示されます
あっなるほど・・・「Excelで列の表示をしないを」は
「列」ではなく「行」だったんですね(^^;

  A  B
1   タイトル▼
2 式 ***
3 ↓ ***
4 ↓ ***
5 ↓ ***
6 ↓ ***
7 ↓ ***
8 ↓ ***
9 ↓ ***

式 セルA2に =SUBTOTAL(3,$B$2:B2)
  と入力後、必要行まで複写

参照先(この例ではB列)は、文字、数値、数式での""、
等はOKですが完全な空白があるとカウントされません
必ず、全部書き込まれた列(キー列等)を指定して下さい!
    • good
    • 0
この回答へのお礼

大変有り難うございました
大変理解しやすくコメントしていただき助かりました。
これからも宜しくお願いします。

お礼日時:2001/12/02 12:37

>Excelで列の表示をしないを使用したときに、


  これは、ある列を『表示しない』としてあると解釈しました。

>表示されているデータだけに自動連番を付ける
  『表示されている』があやふやですが、『表示してある列の中で値の入っているセル(数値または文字)』としました。

解釈通りだとすると、非表示にした列を認識するのは算式ではできないと思い、下記マクロを書いてみました。
連番を書き出す位置の指定が無いので、選択した行の1行上に書き出しています。

操作方法としては、データが入っている1行(連番を振りたいデータが入っている行です)を選択して実行します。


ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入し、そこに下記コードを貼り付けます。

Public Sub RenbanSet()
  Dim rg As Range '選択範囲の1つのセル
  Dim startNum As Double '連番の最初の数値
  Const nStep = 1 '連番のステップ(いまは連番は+1)
  Dim col As Integer 'カウンタ

  startNum = InputBox("連番の最初の数値を入力します")

  For Each rg In Selection '選択範囲に対して実行
    If Not rg.EntireColumn.Hidden = True And rg.Value <> "" Then
      '列が非表示でなく、入力があったら
      rg.Offset(-1, 0) = startNum + col '選択した1行上(-1)に連番をセットする
      col = col + nStep '連番を増やす
    Else
      '非表示列または未入力セル
      rg.Offset(-1, 0) = ""
    End If
  Next
End Sub
    • good
    • 0

追記 最後に書こうと思っていたものを書き忘れて


   UPしてしまいましたm(__)m

対象のデータが "" 以外の時、全て対象とする場合

 =IF(B2="","",MAX(A$1:A1)+1)
    • good
    • 0
この回答へのお礼

大変有り難うございました
説明不足で申し訳ありませんでした。
Excelのフィルタを利用すると選択データ(数値・文字)だけが表示されます。その表示データの左側に連続した番号を入力する方法を教えてください

お礼日時:2001/12/02 09:40

こんばんは!



お望みが、
 数式でなのかVBAでなのか
 連番が行なのか列なのか
不明で、かつ表示されるデータが数値なのか文字なのか
表示されない時の処理が "" なのか 0 の非表示なのか
等、シート構成がわからないので不確かですが


  A  B
1   タイトル
2 式 ***
3 ↓
4 ↓ ***
5 ↓
6 ↓
7 ↓ ***
8 ↓
9 ↓

数式で1例

対象(B列データ)が文字列でかつ "" を無視する場合
セルA2に
 =IF(COUNTIF(B2,"?*"),MAX(A$1:A1)+1,"")

対象が数値でかつ 0 と "" を無視する場合
 =IF(SUM(B2),MAX(A$1:A1)+1,"")

対象が数値でかつ 0 も対象とする場合
 =IF(COUNT(B2),MAX(A$1:A1)+1,"")

必要な下行までコピー
    • good
    • 0
この回答へのお礼

大変有り難うございました
説明不足で申し訳ありませんでした

数式で連番は列 表示されるデータは数値・文字両方 表示されない時の処理はフィルタです もしよければよろしくお願いします

お礼日時:2001/12/02 09:48

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

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

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

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

Q『EXCEL』アウトライン設定時に連番をふりたい。

EXCELで、部分的にアウトラインのグループ化を行い、その、目に見えている状態のみで
一気に連番をふりたいのですが、このままオートフィルで連番をつけようとすると
折りたたまれて見えていないところまで連番がふられてしまいます。
目に見えているところだけ連番にしたいのですが、どう操作すれば良いのでしょうか?
ご指導の程、よろしくお願いします。

Aベストアンサー

例えばA列にデータが入力されていて、
見えている行にはすべて何かしらかの
値(文字や数値)が入力されているならば、

例えば、D列に連番を振りたければ、
D1に
=SUBTOTAL(103,$A$1:A1)
と入力し、
以下オートフィルまたはコピー&ペーストしてください。

ただし、
折りたたみを解除すると連番が振り直されてしまいますので、
もし、連番を保持したいのであれば、もう一度折りたたみ、
D列を選択し、「コピー」
「編集」→「形式を選択して貼り付け」で「値」にして「OK」
にしてください。

もう一度、折りたたみを解除して確認すると、連番は保持されて
いますが、折りたたみの部分は一定値が保持されていると思います。

これで、OKであればそれでいいのですが、
もし、ここを空白にしたいのであれば、
アイデアがありますので、必要であればコメントください。

QEXCEL参照列の数値によって表示列の表示内容が自動表示されるには

B列の数値によってA列にAからDを自動表示させたい:

A列(文字)    B列
A        21以上30未満
B        15以上20以下
C        10以上14以下
D        10未満

※A列に何らかの関数を設定する事で可能ですか? 

Aベストアンサー

B1に数値があるなら

=IF(AND(B1>=21,B1<30),"A",IF(AND(B1>=15,B1<20),"B",IF(AND(B1>=10,B1<14),"C",IF(B1<10,"D","-"))))

A~Dに当てはまらない場合、「-」にしています。

IF文で
=IF( 【条件】 , 【条件に合う場合】 , 【合わない場合】 )
となるわけですが、【合わない場合】にまたIF文をいれて条件分岐させるわけです。
ANDは2つの条件を満たす場合に用います。

QExcelの連番をふりなおす

Excelの表で、A列に連番をつけてあります。
行を挿入したり、削除したときに、連番がくずれないように
自動的にふりなおす方法があれば、教えていただけないでしょうか。
ヨロシクお願いします!!!

Aベストアンサー

例えばA3セルから下方向に1,2,3,4…と連番を入れるとします。
A3セルには
 =ROW()-2
と入力して下方向にコピーします。

行を削除しても連番は崩れません。行挿入したときはさすがに自動では関数が入力されませんが、上下のセルをコピーすれば連番となります

QEXCEL: 非表示を含んだときの連番表示について

EXCEL: 非表示を含んだときの連番表示について
エクセル2010を利用して、ある数値に従って順位をつけたいのですが非表示行があるせいかうまくいきません。


◆問題再現
(1)フィルタを利用して不要な値の部分のチェックを外すため非表示行が発生する。
(2)ある列の値に従ってRANK関数を用いてみたが、非表示行も含めて選択するため、非表示行のランクを含めた順位が出てしまう。1,4,5,6,8,…のように出る。

◆自分なりの対応策
(1)SUBTOTALを利用して非表示行をスキップし、連番をつけることには成功。
=>しかし、フィルタでソートし直したときに、他の列の値と関連していないため固定(常に1, 2, 3, 4, とでる。)
(2)RANKを利用し順位がでる。
=>上述したとおり、非表示行も含めた順位の計算をしてしまう。


この問題に対処するのは無理なのでしょうか?
RANK関数で非表示行だけ選択(ALT+;のような)することができればいけそうですが、よく分からないです。
かなり分かりにくい質問となってしまいましたが、どうぞよろしくお願いします。

EXCEL: 非表示を含んだときの連番表示について
エクセル2010を利用して、ある数値に従って順位をつけたいのですが非表示行があるせいかうまくいきません。


◆問題再現
(1)フィルタを利用して不要な値の部分のチェックを外すため非表示行が発生する。
(2)ある列の値に従ってRANK関数を用いてみたが、非表示行も含めて選択するため、非表示行のランクを含めた順位が出てしまう。1,4,5,6,8,…のように出る。

◆自分なりの対応策
(1)SUBTOTALを利用して非表示行をスキップし、連番をつけることには成功。
=>しかし、...続きを読む

Aベストアンサー

例えばA2セルから下方に連番があるとします。また、別にB2セルから下方には何かの数値が入力されているとします。

例えばC2セルから下方にフィルタでソートしたあとの番号を1から連番で表示させるとしたらC2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",SUBTOTAL(2,A$2:A2))
または次の式でもよいでしょう。
=IF(A2="","",SUBTOTAL(2,B$2:B2))

C列には表示されている行のみに連番が表示されます。

QExcelで飛ばし連番

Excelで連番をふりたいのですが、下記のようなことは可能でしょうか?

A列に曜日、B列に連番なのですが、
土曜日と日曜日は飛ばしたいのです。
連番が1000ほど続くので、何かいい方法はないかと考えています。
宜しくお願いいたします。

  A B
1 月  1
2  火  2
3 水  3
4  木  4
5 金  5
6 土
7 日
8  月  6
9 火  7
  ・  ・
  ・  ・
  ・  ・

Excel2002を使用しています。

Aベストアンサー

A列に日付があるとします。すなわちA列は日付シリアル値が入っているとします。文字列だと直接はダメですが。
C2に
=IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),"",MAX($B$1:B1)+1)
と入れて月末まで式を複写する。
結果
2007/3/1 1
2007/3/2 2
2007/3/3
2007/3/4
2007/3/5 3
2007/3/6 4
2007/3/7 5
2007/3/8 6
2007/3/9 7
2007/3/10
2007/3/11
2007/3/12 8
以下略。
曜日の文字を使うならB列は、=TEXT(A2,"aaa")で文字列の「値」にしてください。表示形式ではダメ。

Q行のデータ(a列b列c列)をd列に表示したい

a1、b1、c1のセルに入力したデータをd1セルに表示したい。可能でしょうか。一例「a1セルに1と入力、b1セルに2と入力、c1セルに3と入力しd1セルに123と表示する」

Aベストアンサー

d1セルに =a1&b1&c1

エクセルですよね?

QExcel上でのデータ数字が連番であることを確認する方法を教えてくださ

Excel上でのデータ数字が連番であることを確認する方法を教えてください。

ある列に数字5桁で、00001,00002・・・と数字が約30000件並んでいますが、
これが重複や漏れなく正しく連番が付与されることを確認したいと考えています。

目視で1件ずつ見る以外に、関数等を使って検証する方法は無いでしょうか?
Excelは2003です。
どなたか良いアドバイスをお願いします。

Aベストアンサー

列内の1行ごとの差は「1」になるはずですね。
例えば a2-a1という式をすべてに投入すれば、条件を満たしていればすべての差が「1」です。
 あとはフィルターで「1」以外の答えが入っているかどうかを確認すればいいのではないでしょうか。

Qエクセルのワークシート(テンプレート)に自動連番を付けられますか

エクセルのワークシート(テンプレート)に自動連番を付けられますか
今現在使用してますエクセルは「EXCEL2000」です
いつも登録しています自作のテンプレートの連番の位置に[No.000000]を毎回手入力で入れてまして関数か何かで登録できれば非常に助かるので、ご存知の方お手数ですが教えてください。宜しくお願いします

Aベストアンサー

テンプレートを開くたびに既に使った連番+1が自動的に決められたセルに書き込まれるようにしたいということだと思いマクロを書いてみました。はずしていたら読み飛ばして下さい。
キー記録での方法はよく分かりませんので直接書いています。

まず、自動ではありませんが、例えばA1セルに[No.000000]を設定したい場合、
 A1:="[No."&RIGHT("00000"&B1,6)&"]"
としてB1に数値を入力する方法はどうでしょう?B1セルの色を白にするとか、セルの書式設定→表示形式のユーザー設定でスペース1つを設定しておけばB1は表示されません。個人的に使用するならB1を覚えておいて入力すればいい?次はむりやり自動的に表示する方法です。

この質問は今回使う連番をどうやって決めるかが要点だと思います。テンプレートに書き込んでおくのも面倒ですし、既に作成したファイルをサーチするのも重い処理になってしまいます。
そこで、テキストファイルを用意して、このファイルに記録した番号を使うようにしています。

ファイルには次に使われる連番をセットしておきます。ハードディスクのどこかのフォルダにメモ帳等を使って次に使う番号を書いたテキストファイルを作ります。(101番だったら101を入力します)
このファイルのフルパスは下記マクロにセットします。

テンプレートの Workbook_Openイベントに書き込みます。(手順は下に)
  ツール→マクロ→Visual Basic Editor でVBE画面に移ります。
  表示→プロジェクトエクスプローラ でプロジェクトエクスプローラを表示し、
  ThisWorkbook をダブルクリックしてエディット画面を出します。
  下記のコードをコピーして貼り付けます。
  次に使う番号を書いたテキストファイル名と、自動連番をセットするシート名とセル番地は
  ご自分のものに合うように変更して下さい。(「これは例です」と書いた箇所です)
次に、自動連番をセットするセルは未入力状態にします(クリアしておきます)
終ったらテンプレートとして保存して下さい。(xlsファイル形式でテストして完成したらテンプレートにしたらどうでしょうか)

欠点・・・
xlsファイルとして保存してもマクロが残ってしまいます。 m(_ _)m
ただし、連番を登録するセルに既に入力(xlsファイルになっている)があれば更新しません。
テンプレートを開いた時点でテキストファイルの連番が更新されるため、そのファイルを保存しなければ連番が飛ぶことになってしまいます。手で修正が必要です。
参考になればと思い作りました。

'***使用済み最終番号を書いたファイル名
Const renbanFile = "A:\Renban\RenbanData.txt" 'これは例です

'テンプレートを開いた時点で連番を読込みシートに書く
Private Sub Workbook_Open()
'書き込む位置の定義
Dim rg As Range '自動連番をセットするセル
Set rg = Worksheets("Sheet1").Range("A1") '***これは例です
If rg <> "" Then
Exit Sub '既に書かれていれば何もしない
End If
Dim fileNo As Integer 'ファイル番号
Dim renban As Long '連番
'連番の入力
fileNo = FreeFile
Open renbanFile For Input As #fileNo
Input #fileNo, renban: Close
'連番を書き込む
rg = "[No." & Right("000000" & renban, 6) & "]"

'連番の更新(次回使う番号を書込み)
Open renbanFile For Output As #fileNo
Print #fileNo, renban + 1: Close
End Sub

テンプレートを開くたびに既に使った連番+1が自動的に決められたセルに書き込まれるようにしたいということだと思いマクロを書いてみました。はずしていたら読み飛ばして下さい。
キー記録での方法はよく分かりませんので直接書いています。

まず、自動ではありませんが、例えばA1セルに[No.000000]を設定したい場合、
 A1:="[No."&RIGHT("00000"&B1,6)&"]"
としてB1に数値を入力する方法はどうでしょう?B1セルの色を白にするとか、セルの書式設定→表示形式のユーザー設定でスペース1つを設定しておけ...続きを読む

Qexcelの関数かマクロで連番、日付を付けたい

こんばんわ、EXCELマクロ入門者です。
excelの関数かマクロ、VBAで日付や、連番を付けたいです。
できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。
(1)まず、B2に商品名を入れます。
(2)すると、A2に連番、C2に今日の日付(システム日付)、
D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。

A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、
C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。

イメージとしては下のような感じです。
  A   B    C     D
1 連番 商品名 日付    商品名-日付-商品ごとの連番
2 1   ○○○ 2007/8/10  ○○○-2007/8/10-1
3 2   ××× 2007/8/12  ×××-2007/8/12-1
4 3   △△△ 2007/8/13  △△△-2007/8/13-1
5 4   ○○○ 2007/8/15  ○○○-2007/8/15-2
6 5   ○○○ 2007/8/16  ○○○-2007/8/16-3

どなたか、ご教授ください。
どうぞ、宜しくお願い致します。

こんばんわ、EXCELマクロ入門者です。
excelの関数かマクロ、VBAで日付や、連番を付けたいです。
できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。
(1)まず、B2に商品名を入れます。
(2)すると、A2に連番、C2に今日の日付(システム日付)、
D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。

A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、
...続きを読む

Aベストアンサー

>C2に今日の日付(システム日付)
を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。
でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います

B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B2:B65536")) Is Nothing Then
  If Target.Cells(1, 1).Value = "" Then
   Target.Offset(, 1) = ""
  Else
   Target.Offset(, 1) = Date
  End If
 End If
End Sub

A2セルの関数式は
 =IF(B2="","",ROW()-1)
D2セルの関数式は
 =IF(B2="","",B2&"-"&TEXT(C2,"YYYY/MM/DD")&"-"&SUMPRODUCT((B$2:B2=B2)*(C$2:C2=C2)))
A2,D2ともに下方向にコピーしてください

補足
VBAでシートのSelection_Changeイベントを使って、「B列が変更されたらA列、D列にデータを書き込む」のは簡単にできます。
でも10行目までデータを入力した後、2行目に戻って商品名を直したらどうなりますか?

VBAで2行目の連番はふり直されますが、3行目~10行目の連番ふり直しは普通しません。(毎回全行のふり直しをするようVBAを書けば別ですが、普通そんな無駄な処理にはしないでしょう)
ですから特にD列のデータ書き込みはVBAではなく、シートの値によって自動的に更新される関数式の方がよいのです

>C2に今日の日付(システム日付)
を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。
でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います

B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください

Private Sub Worksheet_Cha...続きを読む

QExcelで特定の文字列の末尾に連番を付ける方法

A列には数字と特定の文字列(例:AAAA)が入力されている状態です.この状態で以下の例のように文字列の末尾に連番を自動で入力し,さらにB列の値が等しい場合は同じ連番を入力する方法を教えて下さい.よろしくお願いします
A B
1111 100
2222 200
AAAA-01 300
2222 200
AAAA-02 200
AAAA-01 300


Aベストアンサー

こんにちわ
標準モジュールで、実行してください。


Sub 文字列の末尾に連番を自動で入力B列の値が等しい場合は同じ連番を入力()
Dim maxRow As Long
Dim i As Long, j As Long
Dim myDic As Object, myKey
Dim Temp, TempArray
Dim str1 As String, str2 As String, str3 As String
Const CstAAA As String = "AAAA,BBBB,ABCD"
'Const CstAAA As String = "AAAA"
'特別な文字列が一つしかない時は下、複数ある時は上


Set myDic = CreateObject("Scripting.Dictionary")
TempArray = Split(CstAAA, ",")
For Each Temp In TempArray
myDic(Temp) = 0
Next Temp


With Worksheets("Sheet3") 'シート名は、実際の物にする
maxRow = .Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To maxRow
str1 = .Cells(i, 1).Value
If myDic.exists(str1) Then
str2 = .Cells(i, 2).Value
str3 = str1 & "/" & str2
If Not myDic.exists(str3) Then
j = myDic(str1) + 1
myDic(str1) = j
myDic(str3) = j
End If
.Cells(i, 1).Value = str1 & "_" & Format(myDic(str3), "00")
End If
Next i
End With
End Sub


解らないことがあったら
excel vba xxxxで検索してください。
例 excel vba exists [検索]

こんにちわ
標準モジュールで、実行してください。


Sub 文字列の末尾に連番を自動で入力B列の値が等しい場合は同じ連番を入力()
Dim maxRow As Long
Dim i As Long, j As Long
Dim myDic As Object, myKey
Dim Temp, TempArray
Dim str1 As String, str2 As String, str3 As String
Const CstAAA As String = "AAAA,BBBB,ABCD"
'Const CstAAA As String = "AAAA"
'特別な文字列が一つしかない時は下、複数ある時は上


Set myDic = CreateObject("Scripting.Dictionary...続きを読む


人気Q&Aランキング

おすすめ情報