Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5847 / 13645 ツリー ←次へ | 前へ→

【48539】行数を指定して数式埋込 saito 07/4/21(土) 17:54 質問[未読]
【48540】Re:行数を指定して数式埋込 かみちゃん 07/4/21(土) 18:21 発言[未読]
【48544】Re:行数を指定して数式埋込 saito 07/4/21(土) 20:01 発言[未読]
【48545】Re:行数を指定して数式埋込 かみちゃん 07/4/21(土) 20:24 発言[未読]
【48548】Re:行数を指定して数式埋込 saito 07/4/22(日) 0:35 発言[未読]
【48549】Re:行数を指定して数式埋込 saito 07/4/22(日) 1:14 発言[未読]
【48551】Re:行数を指定して数式埋込 かみちゃん 07/4/22(日) 10:38 発言[未読]
【48552】Re:行数を指定して数式埋込 かみちゃん 07/4/22(日) 10:44 発言[未読]
【48553】Re:行数を指定して数式埋込 saito 07/4/22(日) 12:53 発言[未読]
【48554】Re:行数を指定して数式埋込 かみちゃん 07/4/22(日) 13:21 発言[未読]
【48556】Re:行数を指定して数式埋込 saito 07/4/22(日) 17:10 質問[未読]
【48557】Re:行数を指定して数式埋込 かみちゃん 07/4/22(日) 17:22 発言[未読]
【48558】Re:行数を指定して数式埋込 saito 07/4/22(日) 17:37 お礼[未読]
【48559】Re:行数を指定して数式埋込 saito 07/4/22(日) 17:41 質問[未読]
【48560】Re:行数を指定して数式埋込 かみちゃん 07/4/22(日) 17:51 発言[未読]
【48561】Re:行数を指定して数式埋込 saito 07/4/22(日) 18:01 発言[未読]
【48562】Re:行数を指定して数式埋込 かみちゃん 07/4/22(日) 18:11 発言[未読]
【48569】Re:行数を指定して数式埋込 saito 07/4/23(月) 0:46 お礼[未読]

【48539】行数を指定して数式埋込
質問  saito  - 07/4/21(土) 17:54 -

引用なし
パスワード
   過去データ見つかりませんでしたので
教えて下さい
何行かを指定し数式を埋込したいのですが
BN11に=IF(BO11="","",BO11/$BO$8)
これ以降にBN12.BN13・・・
=IF(BO12="","",BO12/$BO$8)
=IF(BO13="","",BO12/$BO$8)
を行数を指定し埋込したいのですが
できるでしょうか。
最大23行ですBN34までです。
最初のクリックで行数指定
次にBN11〜BN34をクリア
数式指定行埋込の手順にしたいのですが
よろしくお願いします。

【48540】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/21(土) 18:21 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>何行かを指定し数式を埋込したいのですが
>BN11に=IF(BO11="","",BO11/$BO$8)
>これ以降にBN12.BN13・・・
>=IF(BO12="","",BO12/$BO$8)
>=IF(BO13="","",BO12/$BO$8)
>を行数を指定し埋込したい

複数行に対して、一括して数式を設定することはできます。
たとえば、こんな感じです。
Sub Test()
 Range("A1:A3").Formula = "=B1+C1"
End Sub

そこで、今回は、以下のようにしたらできると思います。

Sub Sample()
 Dim rng As Range
 
 On Error Resume Next
 Set rng = Application.InputBox("コピー元セルは?", , ActiveCell.Address, , , , , 8)
 On Error GoTo 0
 If Not rng Is Nothing Then
  If rng.Count = 1 Then
   rng.Resize(23 + 1).Formula = rng.Formula
  Else
   MsgBox "複数のセルは指定できません"
  End If
 Else
  MsgBox "キャンセルしました"
 End If
End Sub

【48544】Re:行数を指定して数式埋込
発言  saito  - 07/4/21(土) 20:01 -

引用なし
パスワード
   ▼かみちゃん さん:
ありがとうございます。
コピー元を指定して実行するのですね。
この場合範囲が決まっているようでが
行数を指定することは
出来ないでしょうか?
よろしくお願いします。

>複数行に対して、一括して数式を設定することはできます。
>たとえば、こんな感じです。
>Sub Test()
> Range("A1:A3").Formula = "=B1+C1"
>End Sub
>
>そこで、今回は、以下のようにしたらできると思います。
>
>Sub Sample()
> Dim rng As Range
> 
> On Error Resume Next
> Set rng = Application.InputBox("コピー元セルは?", , ActiveCell.Address, , , , , 8)
> On Error GoTo 0
> If Not rng Is Nothing Then
>  If rng.Count = 1 Then
>   rng.Resize(23 + 1).Formula = rng.Formula
>  Else
>   MsgBox "複数のセルは指定できません"
>  End If
> Else
>  MsgBox "キャンセルしました"
> End If
>End Sub

【48545】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/21(土) 20:24 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>この場合範囲が決まっているようでが
>行数を指定する

もちろんできますが、その基準は何ですか?
毎回、何行分とか指定するのですか?
それよりも、データの入っている行までとかのほうが、決めやすいと思うのですが。

ちなみに、行数指定は、同じようにInputBoxで指定すればいいかと思います。
ヘルプで確認してみてください。

【48548】Re:行数を指定して数式埋込
発言  saito  - 07/4/22(日) 0:35 -

引用なし
パスワード
   ▼かみちゃん さん:
色々調べて下記のようにしたのですが
InputBoxの表示位置を
      Left:=500, _
      Top:=350, _
かみちゃんさんのコードを同じにしたいのですが
できませんか
コードに自信ありません良きアドバイスお願いします。

Sub Sample()
 Dim rng As Range
 Dim i As Variant
 
  ActiveSheet.Unprotect
  Range("BN12:BN27").Select
  Selection.ClearContents
  Range("BN11").Select

  i = Application.InputBox( _
      Title:="BN列の何行目までですか【エンドまでの行数】", _
      Prompt:="行数を入力しなさい。", _
      Default:=10, _
      Left:=500, _
      Top:=350, _
      Type:=1)
 On Error Resume Next
 Set rng = Application.InputBox("コピー元セルは?", , ActiveCell.Address, , , , , 8)
 On Error GoTo 0
 If Not rng Is Nothing Then
  If rng.Count = 1 Then
   rng.Resize(i + 1).Formula = rng.Formula
  Else
   MsgBox "複数のセルは指定できません"
  End If
 Else
  MsgBox "キャンセルしました"
 End If
  Application.Goto Reference:="R11C66"
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

【48549】Re:行数を指定して数式埋込
発言  saito  - 07/4/22(日) 1:14 -

引用なし
パスワード
   最初のInputBoxのキャンセルの処理コード
教えて下さい。キャンセルなら中止
OKなら継続したいのですが
よろしくお願いします。
Sub Sample()
 Dim rng As Range
 Dim i As Variant
 Dim A As String

 
  ActiveSheet.Unprotect
  Range("BN12:BN27").Select
  Selection.ClearContents
  Range("BN11").Select

  i = Application.InputBox( _
      Title:="BN列の何行目までですか【エンドまでの行数】", _
      Prompt:="行数を入力しなさい。", _
      Default:=10, _
      Left:=500, _
      Top:=350, _
      Type:=1)
 If Not rng Is Nothing Then
 ★★この辺のキャンセルの処理がよくわからないのですが
どう書けばいいのでしょうか。★★ 
  MsgBox "キャンセルしました"
     Exit Sub
  End If

 On Error Resume Next
 A = ActiveCell.Address
 Set rng = Application.InputBox( _
      Prompt:="コピー元セルは?", _
      Default:=A, _
       Left:=500, _
      Top:=350, _
      Type:=8)
 On Error GoTo 0
 If Not rng Is Nothing Then
  If rng.Count = 1 Then
   rng.Resize(i + 1).Formula = rng.Formula
  Else
   MsgBox "複数のセルは指定できません"
  End If
 Else
  MsgBox "キャンセルしました"
 End If
  Application.Goto Reference:="R11C67"
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

【48551】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/22(日) 10:38 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>最初のInputBoxのキャンセルの処理コード
>教えて下さい。キャンセルなら中止
>OKなら継続したいのですが

InputBoxメソッドの戻り値がどのようになるかをヘルプでしっかり確認してくださる
とわかると思います。

Sub Sample2_1()
 Dim i As String
 'InoutBoxのType引数を省略すると戻り値は文字列になる
 i = Application.InputBox("数値を入力してください。")
 MsgBox i & vbCrLf & TypeName(i)
End Sub

そこで、以下のようにしてはいかがでしょうか?

Sub Sample2()
 Dim rng As Range
' Dim i As Variant
 Dim i As Long
 Dim A As String

 ActiveSheet.Unprotect
 Range("BN12:BN27").Select
 Selection.ClearContents
 Range("BN11").Select

'  i = Application.InputBox( _
'      Title:="BN列の何行目までですか【エンドまでの行数】", _
'      Prompt:="行数を入力しなさい。", _
'      Default:=10, _
'      Left:=500, _
'      Top:=350, _
'      Type:=1)
 i = Val(Application.InputBox( _
      Title:="BN列の何行目までですか【エンドまでの行数】", _
      Prompt:="行数を入力しなさい。", _
      Default:=10, _
      Left:=500, _
      Top:=350, _
      Type:=1))
' If Not rng Is Nothing Then
' ★★この辺のキャンセルの処理がよくわからないのですが
'どう書けばいいのでしょうか。★★
'  MsgBox "キャンセルしました"
 If i = 0 Then
  MsgBox "行指定をキャンセルしました"
     Exit Sub
 End If

' On Error Resume Next
 A = ActiveCell.Address
 On Error Resume Next
 Set rng = Application.InputBox( _
      Prompt:="コピー元セルは?", _
      Default:=A, _
       Left:=500, _
      Top:=350, _
      Type:=8)
 On Error GoTo 0
 If Not rng Is Nothing Then
  If rng.Count = 1 Then
   rng.Resize(i + 1).Formula = rng.Formula
  Else
   MsgBox "複数のセルは指定できません"
  End If
 Else
  MsgBox "キャンセルしました"
 End If
 Application.Goto Reference:="R11C67"
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

【48552】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/22(日) 10:44 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>コードを同じにしたいのですができませんか

これは、何を同じにしたいのでしょうか?
[48549]で提示されたコードで、ある程度実現できているのではないでしょうか?
ただ、行数指定を求めているようですが、データの入っている行までとかのほうが、
指定ミスなどないと思うのですが、そういうことは考えにないのでしょうか?

【48553】Re:行数を指定して数式埋込
発言  saito  - 07/4/22(日) 12:53 -

引用なし
パスワード
   ▼かみちゃん さん:
ありがとうございます。
>
>これは、何を同じにしたいのでしょうか?
>[48549]で提示されたコードで、ある程度実現できているのではないでしょうか?
↑は解決です
>ただ、行数指定を求めているようですが、データの入っている行までとかのほうが、
>指定ミスなどないと思うのですが、そういうことは考えにないのでしょうか?
↑そうですねその通りだと思います
数式を埋め込む隣の列[BO列]にデータを入力しているのですが
最小でBO11〜BO13、最大でBO11〜BO27までなのですが
この入力値[BO列]の最下まで数式を埋めたい場合
どこを修正すればいいですか
そうすればInputBoxでの行指定は必要なくなりますね・・・(-_-;)

【48554】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/22(日) 13:21 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>数式を埋め込む隣の列[BO列]にデータを入力しているのですが
>最小でBO11〜BO13、最大でBO11〜BO27までなのですが
>この入力値[BO列]の最下まで数式を埋めたい場合

BN11の数式をBO列の最下行のセルの行までコピーするなら、以下のコードだけで
できます。
InputBoxメソッドによるコピー元セル範囲の指定も不要です。

Sub Sample4()
 With Range("BN11")
  .Resize(Range("BN65536").End(xlUp).Row - .Row + 1).Formula = .Formula
 End With
End Sub

【48556】Re:行数を指定して数式埋込
質問  saito  - 07/4/22(日) 17:10 -

引用なし
パスワード
   ▼かみちゃん さん:
ありがとうございます。
ここまでやるならBN11に数式までいれたいのですが
BN11=IF(BO11="",#N/A,BO11/$BO$8)
入れられますか?

>>数式を埋め込む隣の列[BO列]にデータを入力しているのですが
>>最小でBO11〜BO13、最大でBO11〜BO27までなのですが
>>この入力値[BO列]の最下まで数式を埋めたい場合
>
>BN11の数式をBO列の最下行のセルの行までコピーするなら、以下のコードだけで
>できます。
>InputBoxメソッドによるコピー元セル範囲の指定も不要です。
>
>Sub Sample4()
> With Range("BN11")
>  .Resize(Range("BN65536").End(xlUp).Row - .Row + 1).Formula = .Formula
> End With
>End Sub

【48557】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/22(日) 17:22 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ここまでやるならBN11に数式までいれたい

最初はBN11には、数式が入っていないという前提だったのでしょうか?
それであれば、私、勘違いしていました。
まずは、BN11に対して、数式設定する必要があります。

>BN11=IF(BO11="",#N/A,BO11/$BO$8)
>入れられますか?

「マクロの記録」でできますので、確認してみてください。

【48558】Re:行数を指定して数式埋込
お礼  saito  - 07/4/22(日) 17:37 -

引用なし
パスワード
   ▼かみちゃん さん:
>
>「マクロの記録」でできますので、確認してみてください。
ありがとうございました。
遠回りしましたが
思い通りできました。
お世話になりました
また、お願いします。

【48559】Re:行数を指定して数式埋込
質問  saito  - 07/4/22(日) 17:41 -

引用なし
パスワード
   ▼かみちゃん さん:
もう一つお聞きしますが[val]とは
何を意味しますか
二つ目のInputBoxにはないですよね

 i = Val(Application.InputBox( _
      Title:="BN列の何行目までですか【エンドまでの行数】", _
      Prompt:="行数を入力しなさい。", _
      Default:=10, _
      Left:=500, _
      Top:=350, _
      Type:=1))

 Set rng = Application.InputBox( _
      Prompt:="コピー元セルは?", _
      Default:=A, _
       Left:=500, _
      Top:=350, _
      Type:=8)

【48560】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/22(日) 17:51 -

引用なし
パスワード
   こんにちは。かみちゃんです。

> val とは何を意味しますか
> 二つ目のInputBoxにはないですよね

Val関数のヘルプを確認されていますか?
また、InputBoxメソッドのヘルプも確認されていますか?
InputBoxメソッドの場合は、Type引数の意味を理解されてください。

でも、1つめのInputBoxは、Type:=1 なので、Valはあってもいいですけど、不要ですね。

理解できなければ、どこがわからないかを聞いてください。

【48561】Re:行数を指定して数式埋込
発言  saito  - 07/4/22(日) 18:01 -

引用なし
パスワード
   ▼かみちゃん さん:
うーわからん文法ですか
Type   省略可能です。バリアント型 (Variant) の値を使用します。返されるデータの型を指定します。この引数を省略すると、ダイアログ ボックスは文字列 (テキスト) を返します。次に示す値の中から 1 つまたは複数の値の合計値を指定します。

値 意味
0 数式
1 数値
2 文字列 (テキスト)
4 論理値 (True または False)
8 セル参照 (Range オブジェクト)
16 #N/A などのエラー値
64 数値配列


引数 Type には、上の表の値を加算して複数のデータ型を指定することができます。たとえば、文字列または数値が入力できるダイアログ ボックスを作成するときは、引数 Type の値を 1 + 2 に設定します。
↑これですか?
ヘルプ見ましたがどこにも・・・
>> val とは何を意味しますか
>> 二つ目のInputBoxにはないですよね
>
>Val関数のヘルプを確認されていますか?
>また、InputBoxメソッドのヘルプも確認されていますか?
>InputBoxメソッドの場合は、Type引数の意味を理解されてください。
>
>でも、1つめのInputBoxは、Type:=1 なので、Valはあってもいいですけど、不要ですね。
>
>理解できなければ、どこがわからないかを聞いてください。

【48562】Re:行数を指定して数式埋込
発言  かみちゃん  - 07/4/22(日) 18:11 -

引用なし
パスワード
   こんにちは。かみちゃん てす。

>↑これですか?
>ヘルプ見ましたがどこにも・・・

きちんと書いてありますよ。

>値 意味
>0 数式
>1 数値
>2 文字列 (テキスト)
>4 論理値 (True または False)
>8 セル参照 (Range オブジェクト)

Type:=1 の場合は、戻り値は、数値です。
Type:=2 または、省略の場合は、戻り値は、文字列です。
Type:=8 の場合は、戻り値は、Rangeオブジェクトです。

つまり、戻り値が文字列で、それを数値として扱いたいのならば、Val関数で変換
してあげる必要がありますが、今回の場合は、Type:=1としていますので、戻り値
が数値のため、わざわざVal関数の変換は不要というわけです。
なお、変換してもエラーにはなりません。

ただし、Rangeオブジェクトの場合は、値とは違いますから、この次元の話では
ありません。

と、私はヘルプで理解していますが、違っていたら、どなたかのご指摘をいただきたいところです。

【48569】Re:行数を指定して数式埋込
お礼  saito  - 07/4/23(月) 0:46 -

引用なし
パスワード
   ▼かみちゃん さん:
何度もありがとうございました。
また、お願いします。

5847 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free