• ベストアンサー

ダイアログボックスで入力したい

たとえばダイアログボックスでIDと名前を入れると ID=1022 名前=織田信長 セルB5に ='C:\Documents and Settings\Owner\デスクトップ\[1022織田信長.xls]Sheet1'!$C$5 のように入るように作るにはどのように書けばいいでしょうか? 本当によろしくお願いいたします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

>変化するのは行だけなんですがDとかEとかHとか飛び飛びではあるんですが可能でしょうか? まず、このコードを書いているBookのA列の最終行と同じ行のE・F・H列に 数式を入れるとします。 数式はIDと名前を基にBook・Sheet・列を指定しますが、その時の 指定されるBookのどの行を呼び出すのか?なんですけど。 仮に呼び出す方のBookの新しく書き込む行と同じで良ければ、 Sub TEST2()   Dim ID As String   Dim Nam As String   ID = Application.InputBox("IDは?", "ID入力", Type:=2)   Nam = Application.InputBox("名前は?", "名前入力", Type:=2)   If LenB(ID) * LenB(Nam) = 0 Or (ID = "False" Or Nam = "False") Then         Exit Sub   Else   With Range("A" & Cells(Rows.Count, 1).End(xlUp).Row).Offset(1)   .Offset(0, 0).Value = Nam   .Offset(0, 2).Value = ID   .Offset(0, 4).Formula = _               "='C:\Documents and Settings\Owner\デスクトップ\[" _               & ID & Nam & ".xls]Sheet1'!C" & .Row   .Offset(0, 5).Formula = _               "='C:\Documents and Settings\Owner\デスクトップ\[" _               & ID & Nam & ".xls]Sheet1'!D" & .Row   .Offset(0, 7).Formula = _               "='C:\Documents and Settings\Owner\デスクトップ\[" _               & ID & Nam & ".xls]Sheet1'!E" & .Row   End With   End If End Sub こんな感じになりますが。 参照先のどの行を選択させるのか?が疑問です。 列を変化させるのなら数式のC・D・E等を変えれば良いだけですが、 各Bookの最新(最終行)となると数式を入れるのでは無理です。 参照したいBookを開いて最終行を取得し、数式ではなく値をいれるしか ないかと。

wingup
質問者

お礼

.Offset(0, 7).Formula = _ "='C:\Documents and Settings\Owner\デスクトップ\[" _ & ID & Nam & ".xls]Sheet1'!$E$30" このような形にしたらできました。 本当に本当にありがとうございました。 これを参考にシート名も埋め込めるように自分で考えてやってみようと思います。 夜遅くまで本当にすみませんでした。

wingup
質問者

補足

本当に本当にありがとうございます。 とてもとても嬉しいです。 参照先の行は30行目で固定なんですがそれは埋め込めばいいですよね。 今からやってみます。

その他の回答 (3)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>A列最終行の一つ下が5番目の場合、A列に名前が入りその右ひとつ飛ばした所にIDがC6が入り、E6、F6、H6に順次 結局A列の名前とC列のIDを基にしたいと言う事ですか? (ダイアログを使うのではなく) E列より右にどのような式を入れたいのか? Sheet1'!$C$5 ←このC5は行・列に対して固定?変動? 変動であれば参照するセルはどのように変化させたいのか?

wingup
質問者

お礼

すみません 書くというのは10個ぐらいあるので 下記のように一つ一つ書いていくと言う意味だったんですが本当にすみませんでした。 Range("B5").Formula = _              "='C:\Documents and Settings\Owner\デスクトップ\[" & ID _               & Nam & ".xls]Sheet1'!R5C"  Range("B5").Formula = _              "='C:\Documents and Settings\Owner\デスクトップ\[" & ID _               & Nam & ".xls]Sheet1'!R5E3"  Range("B5").Formula = _              "='C:\Documents and Settings\Owner\デスクトップ\[" & ID _               & Nam & ".xls]Sheet1'!R5H3"

wingup
質問者

補足

一つ一つ書こうと考えています。 変化するのは行だけなんですがDとかEとかHとか飛び飛びではあるんですが可能でしょうか?

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

ANo.1です。 B列の最終行なら >Range("B5") を Range("B" & Cells(Rows.Count, 2).End(xlUp).Row) として下さい。 最終行の1つ下なら、 Range("B" & Cells(Rows.Count, 2).End(xlUp).Row+1) ですね。 A列の最終行に合わせるのなら、 Range("B" & Cells(Rows.Count, 1).End(xlUp).Row) です。

wingup
質問者

補足

早速のご回答本当にありがとうございます。 ただ、私が馬鹿すぎなのか例えば、A列最終行の一つ下が5番目の場合、A列に名前が入りその右ひとつ飛ばした所にIDがC6が入り、E6、F6、H6に順次='C:\Documents and Settings\Owner\デスクトップ\[1022織田信長.xls]Sheet1'!$C$5←これの少し変化したもが入るようにしたいんですがどうもわかりません。 名前はどんどん追加されますのでこの形を取っています。 できそうで出来なくて・・・・・本当にすみません よろしくお願いいたします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub TEST()  Dim ID As String  Dim Nam As String  ID = Application.InputBox("IDは?", "ID入力", Type:=2)  Nam = Application.InputBox("名前は?", "名前入力", Type:=2)  If LenB(ID) * LenB(Nam) = 0 Or (ID = "False" Or Nam = "False") Then     Range("B5").ClearContents     Exit Sub  Else  Range("B5").Formula = _              "='C:\Documents and Settings\Owner\デスクトップ\[" & ID _               & Nam & ".xls]Sheet1'!R5C3"  End If End Sub こんな感じの事でしょうか?

wingup
質問者

補足

すみません 大変ありがとうございました。 これをB5ではなく最下行に挿入するにはどうしたらいいでしょうか? すみませんがよろしくお願いいたします。