• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAのフォームにレコード番号を表示させたい)

VBAのフォームでレコード番号を表示させる方法

このQ&Aのポイント
  • VBAを使用してエクセルのフォームにレコード番号を表示させる方法を教えてください。
  • フォームに入力した個人情報をワークシートに反映させるために、個別のレコード番号を表示したいです。
  • 関数を使用して行番号を表示させる方法を試しましたが、全てのレコードが同じ番号になってしまいます。他の方法でレコード番号を表示させることはできるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> 関数を使いA2のセルからA101にかけて、=ROW(A2)-1、=ROW(A3)-1...と入れました。 関数を全て「=ROW()-1」としてみてはいかがでしょう。 =ROW() は、その関数が入っているセルの行番号を返します。A2セルの「=ROW()」と「=ROW(A2)」は、同じ値が返ってきます。 ただ、 > ワークシート上で行を削除すると、欠番は発生しないのですが、 > フォーム側で削除すると、セルに登録されている関数が消え、 > 欠番が発生してしまいます。 が気になります。手操作での削除を「マクロ記録」で記録し、現在のフォーム側の削除方法と同じか、見比べてみて下さい。

xjptm
質問者

お礼

ご回答ありがとうございます。 「=ROW()-1]と入れ、マクロの登録で記録したものを削除ボタンに設定しているプロシージャに記載しましたが、結果同じでした。 しかし、laCODEに表示させた値をセルに反映するといった命令になっている事に気付き、その命令を削除したところ、希望している結果になりました。 今回のご指摘が、ヒントとなり大変助かりました。 本当にありがうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

A列のコードが数字の1~100であるという前提で。 「データを消去する」というボタンを用意したという前提で。 (消去したい)A列のコードがtextbox1に記入若しくは転記されている前提で。 private sub commandbutton1_click() ’TextBox1に該当する行を削除して上に詰める  if me.textbox1 = "" then exit sub  worksheets("シート名").cells(me.textbox1+1, "A").entirerow.delete shift:=xlshiftup end sub

xjptm
質問者

お礼

ご回答ありがとうございます。 別の方法で無事解決することが出来ました。 教えて下さった方法でも希望する結果になり、大変勉強になりました。 分かりやすく解説もしてくださり、助かりました。 この度は、本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

初心者には難しいことだ。フォーム入力時の、削除後の連続番号などに拘らず、シートデータ入力後にまとめて、シートの列に連続番号をセットする方法で逃げたらどうか。 フォームが入力用か表示用かも質問にはっきりかけてない。テキストボックスなどを使うと思うが、.laCODEとかで、ラベルコントロールを使っているのか。フォームに番号を直に表示しているのか。説明が十分でない。 シートの行列ーユーザーフォームーコントロールーシートにデータをセットするトリガーシートとフォームのデータ連動関係など質問には説明すべきです。 エクセルのシートで行削除に対処する(上から連番を振る、不利直す)のはROW()関数で簡単に出来る。 コントロールでは、エクセルシートの情況やデータベース(広い意味ではエクセルのシートはこれにあたる)の情況を検索して、それを番号に使うために、求めないと難しい。このデータベースでの登録済み件数や、番号としての最終番号(飛び飛びの場合など)も、なかなか初心者にはコードを作ることは難しいと思う。 ーー 1単位のデータをシートの行に書き出しているなら、エクセルシートで最終行を取ることは簡単に出来るので、その数に+1などをセットしてはどうだろうか。ただしユーザーフォームとシートでの入力を行き来することなど出来てますか。 ーー 但しシートの行削除を、ユーザーフォームに反映させるなども、大変高等なことと思うので、質問者はあきらめては。 シートの行削除を察知するイベントも、易しい方法は無いと思うから。 ーーー 色々やりたいことは初心者でも、直ぐ思いつくが、VBAレベルで実現できることは限られているのだ。 ソンも素もエクセルシートでフォームにセルの内容を表示するなんてのは、学習例題歯科ありえないのではないか。 シートに見えているのだから、そうする必要性が無い。

xjptm
質問者

お礼

ご回答ありがとうございます。 ご指摘の通り、説明が不足しておりました。 結果、自分で設定した命令が邪魔をしていることに気付き解決することが出来ました。 この度はありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルvbaのフォームでエラーとなります

    ワークシートにIDと名前の対応表があります。 別のシートのA1に検索したいID欄、A2にVLOOKUP関数で結果を表示させています。 VBAの入力フォーム上で、あるIDを入れたときに前途のA1に数値を代入し、A2で得られた結果をフォーム上の欄で取得するようにしています。 この時、表の中に対応する番号と名前があればキチンと結果が出ますが、そもそもデータベースが無ければVBA自体がエラーとなってしまいます。 ワークシート上のVLOOKUPには近似値では困るのでFALSEを指定していますので、該当番号がなければここでの結果は#N/Aとなっています。 フォーム上で該当番号がなければ代わりの文字列、たとえば「なし」などを入力されるようにできるか、最低でもプロセスが中断される事がないようにしたいのですが、どのようにすれば可能でしょうか?

  • EXCELのVBAで、あるワークシートでのみ使うユーザーフォームを作り

    EXCELのVBAで、あるワークシートでのみ使うユーザーフォームを作りました。そのワークシート上での定数や、プロシージャや関数をワークシートのモジュールに置いています。そして、その定数や関数などをユーザーフォームのイニシャライズなどで使いたいと思いますが、ユーザーフォームのモジュールはワークシートのモジュールとは別なので、使えません。他への影響を考えると、標準モジュールには、置くのは不適切だと思います。 特定のワークシート上でのみ使うユーザーフォームと、そのワークシートとで、共通の定数や関数などを使う方法は、あるのでしょうか。どのようにすればよいのでしょうか。

  • エクセル VBA ユーザーフォームの表示

    excel2000にてシートのB列のみで65行目以下をWクリックするとユーザーフォームが表示されるというコードを教えてください。 以下は調べたりした結果のコードです。B列をWクリックすると表示される状態です。 B60とかをクリックしても表示されないようにしたいです。 Worksheetのコード Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True If Target.Column = 2 Then 'B列なら   行 = Target.Row '行番号を取得する   UserForm1.Show 'ユーザーフォームを表示する End If End Sub 標準モジュールのコード Option Explicit Public 行 As Variant '行番号 Sub auto_open() Load UFnyuuryoku 'ユーザーフォームをメモリに読み込む End Sub ご存知の方よろしくお願いします。

  • Accessのフォーム上にレコード数とレコード番号の表示

    Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。 フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。 以上よろしくお願いします。

  • レコードセレクタをクリックすると詳細フォームを表示

    このサイトに何度か、登校しています。eternallyと言います。 さて、質問の内容というのが、ACCESS2010のレコードセレクタについてです。 【Aテーブル】 ID  会社名  ソフト名  ソフトの説明 1   AAAAA BBBBB CCCCCCCC 2 DDDDD EEEEE FFFFFFFFF 3 GGGGG HHHGH IIJIIII 【Bテーブル】 ID 金 額  所有有無 1  50,000 X 2 35,000 ○ 3  70,000  × Aテーブルの内容をそのまま、フォームAとして帳票フォームで表示しています。 ここでフォームAのレコードセレクタをクリックすると、Bテーブルを関連付けた フォームBの内容を表示したいのです。 他のサイトで調べましたが、 同じテーブルをレコードセレクタで表示させる方法は見つかったのですが、 違うテーブルを表示させる方法がみつからなかったので、このサイトで聞いてみようと思いました。 Private Sub Form_Click() Forms!フォームA.Filter = "ID=" & Me!ID Forms!!フォーム.FilterOn = True End Sub 上はフォームAのレコードセレクタをクリックすると、 詳細フォームを表示する場合のVBAです。 フォームBの場合はエラーになって、動いてもくれません。 「フォームBが見つかりません。」というエラーです。 どうぞ、よろしくお願いします。

  • 空白のセルを行削除する。EXCELマクロなのですが・・

    VBA初心者です。 データーをHPから、単純にコピーしてきて、 EXCELに貼り付けています。 フィルターをかけても、画像かなにかがセルに張り付いているのか、 空白行をすべて削除できません。 いろいろ試して(HPから、空白セルの行削除について書かれてあるマクロを貼り付けて)動いたのが、このVBAです。 しかし、遅いので、早いVBAに簡略できればいいのですが。。 大体、1000行ぐらいの文字を貼り付けて、3/1ぐらいが空白行です。A行のセルの空白のみを、削除したいのですが。  まったくの素人なので、わかりません。 どうかよろしくお願いいたします。 Sub 空白の削除() x% = Worksheets("sheet1").Range("A65536").End(xlUp).Row For i = x% To 1 Step -1 If Worksheets("sheet1").Cells(i, 1).Value = "" Then Worksheets("sheet1").Rows(i).Delete Next End Sub

  • Access2013 vbaサブフォームのレコード

    [Access2013 vba] ■したいこと サブフォームのレコードの中から、一レコードだけをチェックボックスなどで選択したいのですが、どのようにしたら出来ますでしょうか。 複数行選択は出来ないようにしたいです。 選択したのち、メインフォームの選択ボタンを押すと、そのレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入したいです。 ■画面の流れ・・・ Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ B 'メインフォームとCサブフォーム)が開く Cサブフォームのレコードをチェックボックスにチェックを入れて選択する B ' メインフォームの「選択」ボタンを押すと B ' メインフォームと、その前のBフォームが閉じて Aフォームに戻り、AフォームのIDフィールドに選択したIDが格納される。 よろしくお願いします。

  • ROW関数について

    先日質問をしたのですが、理解が足りないようなので質問させて頂きます。 ROW関数はセルを入力したそのセルの行番号を返すものだと思うのですが、例えば =INDEX(シート1!C2:シート1!HR2,(ROW()-3)*3+1,) このような数式をワークシート2のD3のセルに入れると、ROW()は3と解釈されるので、 ・範囲はData!のワークシートのC2からHR2まで、 ・(3-3)*1+1となるので、その範囲内の1番であるData!D2セルを参照するのだと思うのですが、何か間違っているでしょうか? この際に、ROW()に参照されるセルは、もしかしてシート1のものなのでしょうか? 宜しくお願いしますm(_ _)m

  • エクセルVBA ユーザーフォームの終了について

    エクセルVBAでユーザーフォームを作成しています。 コマンドボタンにVBAマクロを割り当てしているのですが 思うように動いてくれないので質問します。 コマンドボタンをクリックしたら望む動作 1、ワークシートを選択 2、その後、ユーザーフォームを消す。 と言う動作にしたいのですが、2の ユーザーフォームを消す方法、書き方が分かりません どなたか教えていただけないでしょうか 1の動作は以下のように書いています。その後の書き方を お願いします。 Private Sub CommandButton8_Click() ブック名 = "VBA演習" シート名 = "sheet1" Workbooks(ブック名 & ".xls").Worksheets(シート名).Activate End Sub (ユーザーフォームの名前は"テストフォーム"としてます)

  • EXCEL VBA function で、引数のシート名を取得する

    EXCEL VBA で、 Function yyy(a) yyy = a.row とすると、a の行番号を返すことができます。 a のシート名を返す(取得する)には、どうしたらよいのでしょうか? * a にはセル範囲を渡すのは、運用上の約束としていますので、チェック等は不要です。 よろしくお願いします。

このQ&Aのポイント
  • 給紙ローラーの清掃で使用するローラークリーニングシートを溝に正しくセットしても、印刷機がシートを認識しない問題が発生しました。
  • 印刷機の給紙ローラーをきれいにするために、ローラークリーニングシートを使用しましたが、シートが認識されずに印刷ができません。
  • 給紙ローラーの汚れを取り除くために、ローラークリーニングシートを使いましたが、印刷機がシートを認識しない状態です。
回答を見る

専門家に質問してみよう