Excel VBA質問箱 IV

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

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


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

【77623】VBA初心者 井上 15/11/12(木) 7:34 質問[未読]
【77624】Re:VBA初心者 ウッシ 15/11/12(木) 9:10 質問[未読]
【77625】Re:VBA初心者 井上 15/11/12(木) 9:29 発言[未読]
【77626】Re:VBA初心者 β 15/11/12(木) 10:30 発言[未読]
【77627】Re:VBA初心者 ウッシ 15/11/12(木) 11:26 回答[未読]
【77628】Re:VBA初心者 井上 15/11/12(木) 12:49 お礼[未読]
【77631】Re:VBA初心者 ウッシ 15/11/12(木) 14:32 回答[未読]
【77632】Re:VBA初心者 ウッシ 15/11/12(木) 14:37 発言[未読]
【77629】Re:VBA初心者 井上 15/11/12(木) 12:52 お礼[未読]
【77630】Re:VBA初心者 β 15/11/12(木) 14:13 発言[未読]

【77623】VBA初心者
質問  井上  - 15/11/12(木) 7:34 -

引用なし
パスワード
   初めて投稿させてもらいます。質問なんですが、
A1からA10までランダムな数字を入力してあるとします。
そして、行(row)数字と列(column)数字を受け取るFunctionプロシージャーを作成します。その中に最後の行に入力してある数字を見つけます。そしてその数字をメインsubに呼び出し、Msgboxに表示させたいのですが、方法が分かりません。どなたかお助けお願い申し上げます。
説明が下手で申し訳御座いません。

【77624】Re:VBA初心者
質問  ウッシ  - 15/11/12(木) 9:10 -

引用なし
パスワード
   こんにちは

>そして、行(row)数字と列(column)数字を受け取るFunction

具体的に行列にはどんな数字が入るのですか?

与えられた1つの行と1つの列に
>最後の行に入力してある数字
つまりA10の数字があるか見つけて、その数字をメインに渡す。

って、無意味では?

セルA10の数字そのものでは?

多分意味が違うのでしょうけど、質問を他の人に分かりやすく
書き直した方がいいと思います。


▼井上 さん:
>初めて投稿させてもらいます。質問なんですが、
>A1からA10までランダムな数字を入力してあるとします。
>そして、行(row)数字と列(column)数字を受け取るFunctionプロシージャーを作成します。その中に最後の行に入力してある数字を見つけます。そしてその数字をメインsubに呼び出し、Msgboxに表示させたいのですが、方法が分かりません。どなたかお助けお願い申し上げます。
>説明が下手で申し訳御座いません。

【77625】Re:VBA初心者
発言  井上  - 15/11/12(木) 9:29 -

引用なし
パスワード
   ウッシさん

ご返答有難うございます。
実は、Functionがうまく使えるかどうかの海外の大学の課題なのです。なので、私も全く無意味だと思いますが、課題なのでこの通りにしなければいけないんですよね。。自分で試行錯誤したのですが、全くダメでした。。

行列には、
31
75
53
23
47
39
24
23
63
19

が入ります。そして、Functionキーを使い(For loopを使ってだと思うんのですが。。)レンジがA10に到達したときに答えである数字(19)をサブに呼び出してメッセージ表示したいのです。

私もこのクラスを取る前にVBAの知識が無く、説明がわかりにくく大変申し訳御座いません。


▼ウッシ さん:
>こんにちは
>
>>そして、行(row)数字と列(column)数字を受け取るFunction
>
>具体的に行列にはどんな数字が入るのですか?
>
>与えられた1つの行と1つの列に
>>最後の行に入力してある数字
>つまりA10の数字があるか見つけて、その数字をメインに渡す。
>
>って、無意味では?
>
>セルA10の数字そのものでは?
>
>多分意味が違うのでしょうけど、質問を他の人に分かりやすく
>書き直した方がいいと思います。
>
>
>▼井上 さん:
>>初めて投稿させてもらいます。質問なんですが、
>>A1からA10までランダムな数字を入力してあるとします。
>>そして、行(row)数字と列(column)数字を受け取るFunctionプロシージャーを作成します。その中に最後の行に入力してある数字を見つけます。そしてその数字をメインsubに呼び出し、Msgboxに表示させたいのですが、方法が分かりません。どなたかお助けお願い申し上げます。
>>説明が下手で申し訳御座いません。

【77626】Re:VBA初心者
発言  β  - 15/11/12(木) 10:30 -

引用なし
パスワード
   ▼井上 さん:

>実は、Functionがうまく使えるかどうかの海外の大学の課題なのです。なので、私も全く無意味だと思いますが、課題なのでこの通りにしなければいけないんですよね

課題がどこか変だとして、でも、それが課題だから、それにそって答えなければいけないとして
でも、その課題がどういうものかは、質問者さんは理解しているわけですよね?
その理解している課題の内容を、回答がほしいということなら、回答者にきちんと伝えなければいけませんね。

課題そのものが、何を言っているのかわからない、矛盾があると、そう思っているなら
それを示しても、回答者は困りますよね。

課題が何なのか、これをきちんと伝える、それが第一歩ではないですか?

A列に値があるとします。
で、Functionプロシジャに 「列」と「行」をあたえて「何か」をさせるのですよね?
たとえば、「列」として 5(E列)、「行」として 20 が与えられたとします。
このFunctionプロシジャは、与えられた 5 と 20 から A列の何をどうするのですか?

それって、なんだかおかしいとは思いませんか?
で、課題で出しているくらいだから、そんな、矛盾した課題ではないはずですね。
ということは、その課題の伝え方が正しくないということになりませんか?

【77627】Re:VBA初心者
回答  ウッシ  - 15/11/12(木) 11:26 -

引用なし
パスワード
   こんにちは

課題が英文なんでしょうか?

想像で、

Function test(r As Long, c As Long) As Variant
'=test(1000,1)とすると
'1列目の1000行まで調べて最後の値を表示する
  Dim i As Long
  test = ""
  For i = 1 To r
    If Cells(i, c) = "" Then
      Exit For
    End If
    test = Cells(i, c)
  Next
End Function

こんな事でしょうか?

【77628】Re:VBA初心者
お礼  井上  - 15/11/12(木) 12:49 -

引用なし
パスワード
   分かりにくい私の説明の中、親切にご返答してくださり有難うございます。
課題は英文なんです。。


Write a function that receives a row number and a column number, finds the last row with data in that column, and returns the row number of the last row with data to the calling sub. Write a sub to test the function and display the number of the last row with data.

おそらく、そのような答えを教授が求めていると思います。

本当に有難うございましたm−ーm

▼ウッシ さん:
>こんにちは
>
>課題が英文なんでしょうか?
>
>想像で、
>
>Function test(r As Long, c As Long) As Variant
>'=test(1000,1)とすると
>'1列目の1000行まで調べて最後の値を表示する
>  Dim i As Long
>  test = ""
>  For i = 1 To r
>    If Cells(i, c) = "" Then
>      Exit For
>    End If
>    test = Cells(i, c)
>  Next
>End Function
>
>こんな事でしょうか?

【77629】Re:VBA初心者
お礼  井上  - 15/11/12(木) 12:52 -

引用なし
パスワード
   本当におっしゃる通りだと思います。
私のVBAに関する知識は本当に乏しいもので、英語でかかれてある問題を日本語に訳したら、
VBAに詳しい人は理解してくれるだろうという浅はかな考えで投稿してしまい、本当にご迷惑をおかけいたしました。今度は問題を理解してから質問出来るようにしたいと思います。

▼β さん:
>▼井上 さん:
>
>>実は、Functionがうまく使えるかどうかの海外の大学の課題なのです。なので、私も全く無意味だと思いますが、課題なのでこの通りにしなければいけないんですよね
>
>課題がどこか変だとして、でも、それが課題だから、それにそって答えなければいけないとして
>でも、その課題がどういうものかは、質問者さんは理解しているわけですよね?
>その理解している課題の内容を、回答がほしいということなら、回答者にきちんと伝えなければいけませんね。
>
>課題そのものが、何を言っているのかわからない、矛盾があると、そう思っているなら
>それを示しても、回答者は困りますよね。
>
>課題が何なのか、これをきちんと伝える、それが第一歩ではないですか?
>
>A列に値があるとします。
>で、Functionプロシジャに 「列」と「行」をあたえて「何か」をさせるのですよね?
>たとえば、「列」として 5(E列)、「行」として 20 が与えられたとします。
>このFunctionプロシジャは、与えられた 5 と 20 から A列の何をどうするのですか?
>
>それって、なんだかおかしいとは思いませんか?
>で、課題で出しているくらいだから、そんな、矛盾した課題ではないはずですね。
>ということは、その課題の伝え方が正しくないということになりませんか?

【77630】Re:VBA初心者
発言  β  - 15/11/12(木) 14:13 -

引用なし
パスワード
   ▼井上 さん:

厳しいコメントになるかもしれませんが・・・・

>おそらく、そのような答えを教授が求めていると思います。
>本当に有難うございましたm−ーm

そうじゃないですね。
ウッシさんは、そもそも、そちらの要件提示があやふやだったので、
求めるのもは値かなと、そう解釈されてコードをアップしておられますが
課題は 「returns the row number of the last row with data 」ですから
値ではなく行番号を返さなくてはいけません。

ウッシさんにいただいたコードを、そのまま教授に提出すると、当然ながら
【赤点】ですね。(もちろん、ウッシさんのせいではなく、井上さんのせいです)

>英語でかかれてある問題を日本語に訳したら、VBAに詳しい人は理解してくれるだろう

まったくの思い違いです。
百歩譲って、【井上さんが正しく訳したら】回答側でも、想像できるところはあるでしょう。
でも、課題は、【与えられた列や行の情報から、その列の最終・・・・・】ということですよね。

説明するなら、まずそれを明記した上で、たとえば、1列目が与えられたとして、その時 A列が
こうこうこういった状態なら、そこの、何を返したいという例示。
こうすべきです。

だけど、井上さんは A列に こうこういったデータがある。そこに 列と行を与えて云々という
説明をしましたよね。説明の順序とポイントが間違っているわけです。

これも、VBAがどうこういう問題ではなく、意思疎通の課題、大人としての基本的な能力の
問題です。

さて、列はわかりましたが、まだ【行】の役割が見えません。
井上さんは見えていますか? 見えているなら、その役割を説明しなければいけません。
繰り返します。これはVBAの問題ではありません。物事の解釈・理解の問題です。

で、もし、井上さんも、この行の役割がわからない、ということなら、井上さんが
教授に質問しなければいけません。で、教授の見解を回答者に連絡しなければいけません。

もし、井上さんが、この行の役割に対して何の疑問も持っていないとすれば
それはそれで、問題ですねぇ。

【77631】Re:VBA初心者
回答  ウッシ  - 15/11/12(木) 14:32 -

引用なし
パスワード
   こんにちは

英文を最初に記載しておいた方が良かったですね。

βさんも書かれていますが、引数「row」の意味が分かりにくいですが、

「with data」という表現からすると、1000行目、1列という意味で指定する
ような意味合いではないでしょうか?

つまり判定範囲がセルA1〜A1000という。

一般的に最終行は下から探すので、シートの最大行数を使います。

課題としてはsubからfunctionを呼び出せとなっているので、

Sub test_sub()
'1列目の1000行目から調べて最初の値の行を表示する
  MsgBox test_function(1000, 1)
End Sub
Function test_function(r As Long, c As Long) As Variant
  Dim i As Long
  test_function = ""
  For i = r To 1 Step -1
    If Cells(i, c) <> "" Then
      test_function = i
      Exit For
    End If
  Next
End Function

と答えた方がいいでしょうね。

但し、rowを指定する意味は教授に確認した方がいいと思います。

【77632】Re:VBA初心者
発言  ウッシ  - 15/11/12(木) 14:37 -

引用なし
パスワード
   追記

どこまで求められているか分からないですけど、
不正な引数とか、行列範囲以外の数値とか判定するための
エラー処理は別途必要です。

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