アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の箇所で、「WorksheetFunction Smallでプロパティが取得できません。」
(実行時エラー1004)となります。

Range("A1") = Application.WorksheetFunction.Small(hause, 7)

hauseは Dim hause(15) as variant で定義し、数字が15個入っています。


原因を教えてください。
配列のsmallの例が見つからず、分からないでいます。

A 回答 (3件)

文字列では、もちろんsmall関数で計算する事はできません。


文字列でそういう計算ができる関数等もありません。

まぁプログラミングに慣れた人なら、バブルソートとかちょこちょこっと実装してしまってやっつけるのもありでしょうが、そこまでしなくても例えばセルに一回データを書き出してエクセルに並べ替えさせてしまい、所定の位置のデータを拾ってくるなんて方法もあります。


ただし。
>私のエラーが起きていた中身ですが、英字を混んでいました。
>1234abcdの如くにです。

こういった「文字列の並べ替え」では、よほど条件が整ってない限り大概、大小の判定を失敗します。

上手くいかない例:
sub macro2()
 dim a(15) as variant
 dim i

 for i = 0 to 15
  a(i) = i & "abc"
 next i
 
 with range("Z1:Z16")
  .value = application.transpose(a)
  .sort key1:=range("Z1"), order1:=xlascending, header:=xlno
  range("A1") = range("Z7").value
  ’.clearcontents
 end with
end sub


上手くいく例:
sub macro3()
 dim a(15) as variant
 dim i

 for i = 0 to 15
  a(i) = format(i, "000") & "abc"
 next i
 
 with range("AA1:AA16")
  .value = application.transpose(a)
  .sort key1:=range("AA1"), order1:=xlascending, header:=xlno
  range("A1") = range("AA7").value
  ’.clearcontents
 end with
end sub



改めてあなたの「実際のデータ」をしっかり調べ、「どれが欲しい」のか、どうしてその順になるのか、キチンと整理してからそれをマクロに焼きなおすように考えてみて下さい。よくわからないときは、これ以降は確かに別のご相談内容と思いますので、何をしたいのか事実を添えて新しいご相談として投稿してみて下さい。
    • good
    • 1
この回答へのお礼

何回も有り難うございます。

>文字列では、もちろんsmall関数で計算する事はできません。
>文字列でそういう計算ができる関数等もありません。
 了解です。


>まぁプログラミングに慣れた人なら、バブルソートとかちょこちょこっと実装してしまって
>やっつけるのもありでしょうが、そこまでしなくても例えばセルに一回データを書き出して
>エクセルに並べ替えさせてしまい、所定の位置のデータを拾ってくるなんて方法もあります。
 まさに、ご指摘の方法とは違いますが、別のやり方で解決していました。
 そして、smallを見つけたので使ってみようと思いやってみた。
 ということです。

 現在のやり方なら、英数字混在でも可能です。
 現状維持としておきます。

 少なくとも、「ローカルウインドー」を知ったことが成果です。
 お世話になりました。

お礼日時:2014/02/28 14:05

こんにちは。



変数の、hauseというものは、何の略か分かりませんが、Option Explicit をつけたらいかがですか?

基礎的な書き方を身につけたほうがよいですね。カウンター変数や特別の変数以外は、大文字・小文字を混ぜるなどします。定数は、大文字だけです。今回は、単に綴りが違っているだけの話だと思います。

'//
Option Explicit
Sub Macro1()
 Dim Hause(15) As Double
 Dim i As Long
 For i = 0 To 15
  Hause(i) = i
 Next i
 Range("A1").Value = Application.WorksheetFunction.Small(Hause, 7) 'houseではない。
End Sub
'//
    • good
    • 0

>WorksheetFunction Smallでプロパティが取得できません



症状としては、変数hauseに数字を代入できていない(7個に足りない)ときの状況に合致します。


作成例:
Sub macro1()
 Dim hause(15) As Variant
 Dim i

 For i = 0 To 15
  hause(i) = i
 Next i

 Range("A1") = Application.WorksheetFunction.Small(hause, 7)
End Sub

必ず一度このマクロを実際にあなたのエクセルで作動させて、結果を確認してください。

そのうえで、あなたの動かないマクロをステップ実行させながら、とりあえずローカルウィンドウなどでhauseの中身にキチンと「数字が15個入ってる」かどうか、しっかり目で見て確かめてみてください。
「配列内データにsmallを使う」の回答画像1
    • good
    • 1
この回答へのお礼

早速、かつ、何時も有り難うございます。

お教えの例をやってみました。
綺麗に終了し、6が表示されました。

今回、「ローカルウインドー」なるテクニックを知りました。
今後使わせていただきます。
こんなことを知っていればこれまでに苦労しなかったと思える場面がかなりあったと
悔やんでいます。

本題ですが、
どうもsmallは数字しかダメみたいです。
私のエラーが起きていた中身ですが、英字を混んでいました。
1234abcdの如くにです。

variantという定義がエラーにならなかったので、okと思っていました。
私のexcelでも全てを数字にしたらノーマルに終了しました。

ということで、
今回の直接原因は分かった気がしますが、
英字も含めて昇順を決める命令/関数は存在するのでしょうか。

改めての質問はここを閉め、別にした方が宜しいのでしょうか。
とにかく有り難うございました。

お礼日時:2014/02/28 07:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています