- ベストアンサー
ダイアログボックスで入力したい
たとえばダイアログボックスでIDと名前を入れると ID=1022 名前=織田信長 セルB5に ='C:\Documents and Settings\Owner\デスクトップ\[1022織田信長.xls]Sheet1'!$C$5 のように入るように作るにはどのように書けばいいでしょうか? 本当によろしくお願いいたします。
- みんなの回答 (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を開いて最終行を取得し、数式ではなく値をいれるしか ないかと。
その他の回答 (3)
- n-jun
- ベストアンサー率33% (959/2873)
>A列最終行の一つ下が5番目の場合、A列に名前が入りその右ひとつ飛ばした所にIDがC6が入り、E6、F6、H6に順次 結局A列の名前とC列のIDを基にしたいと言う事ですか? (ダイアログを使うのではなく) E列より右にどのような式を入れたいのか? Sheet1'!$C$5 ←このC5は行・列に対して固定?変動? 変動であれば参照するセルはどのように変化させたいのか?
お礼
すみません 書くというのは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"
補足
一つ一つ書こうと考えています。 変化するのは行だけなんですがDとかEとかHとか飛び飛びではあるんですが可能でしょうか?
- n-jun
- ベストアンサー率33% (959/2873)
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) です。
補足
早速のご回答本当にありがとうございます。 ただ、私が馬鹿すぎなのか例えば、A列最終行の一つ下が5番目の場合、A列に名前が入りその右ひとつ飛ばした所にIDがC6が入り、E6、F6、H6に順次='C:\Documents and Settings\Owner\デスクトップ\[1022織田信長.xls]Sheet1'!$C$5←これの少し変化したもが入るようにしたいんですがどうもわかりません。 名前はどんどん追加されますのでこの形を取っています。 できそうで出来なくて・・・・・本当にすみません よろしくお願いいたします。
- n-jun
- ベストアンサー率33% (959/2873)
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 こんな感じの事でしょうか?
補足
すみません 大変ありがとうございました。 これをB5ではなく最下行に挿入するにはどうしたらいいでしょうか? すみませんがよろしくお願いいたします。
お礼
.Offset(0, 7).Formula = _ "='C:\Documents and Settings\Owner\デスクトップ\[" _ & ID & Nam & ".xls]Sheet1'!$E$30" このような形にしたらできました。 本当に本当にありがとうございました。 これを参考にシート名も埋め込めるように自分で考えてやってみようと思います。 夜遅くまで本当にすみませんでした。
補足
本当に本当にありがとうございます。 とてもとても嬉しいです。 参照先の行は30行目で固定なんですがそれは埋め込めばいいですよね。 今からやってみます。