エクセル2003です。
インプットBOXに数値を入力してもらいます。
整数で1文字以上~8文字以内にさせたいです。
(1)キャンセル選択
(2)間違った入力
(3)未入力でOKを選択
の場合記述してある再入力を促すMsgBoxを表示させたいです。
また(2)(3)はMsgBox表示の後インプットBox入力に戻したいです。
以下に掲載した構文で行うと

(1)インプットBOXの「キャンセル」選択時
→「終了」MsgBox表示(正常)

(2)数字以外を入力した時
→Type:=1にしてある為「数値が正しくありません」
 と記述してあるMsgBoxではないが警告メッセージが表示(正常)

・9文字以上入力した場合
→「再入力」MsgBox表示(正常)

・1文字~8文字を入力した場合
→次の処理に進む(正常)

(3)何も入力せず空白の状態でインプットBoxの「OK」を選択
→記述してあるMsgBoxではなく
「入力した数式は正しくありません」と書かれたヘルプ付き警告が
表示されてしまいます。 
この時は上記同様に記述内にある
再入力を促すMsgBox
を表示させたいのですがどう記述すればいいのか分かりません。

インプットBoxのType:=1をはずせば
記述してあるMsgBoxが表示するようになりますが
今度は整数以外が入力できてしまいます。
よろしくお願いします。

Do
指示数 = Application.InputBox("指示数を数字で入力してください ", Type:=1)
If 指示数 = "False" Then 'キャンセル選択時
MsgBox "終了します", vbExclamation, "注意"
Call 定位置 
Exit Sub 
End If
'1文字以上8文字以内の時はループを抜けて次の処理へ
If Len(指示数) <= 8 Then
Exit Do 'Loopを抜けて次の処理へ
End If
MsgBox "ケタ数が違います。再入力してください", vbCritical, "エラー!!"
Loop 'インプットBoxに戻る
---次の処理

このQ&Aに関連する最新のQ&A

A 回答 (5件)

No.4です。



お礼と補足欄の内容を見させていただきました。
意図通りの動きになったのでしたら何よりです。
ただ、幾つか気になる点がありましたので、補足させてください。

【StrReverseについて】
上記関数は、「123」を「321」に、「ABC」を「CBA」に、と、文字列の
並び順を逆転させます。
前回の回答では、(こちらでの勝手な解釈で)「1.0」は弾きつつ「1.」は
許可する、という動作をさせるために使用しました。
(「1.」を「.1」とし、InStr関数の第1引数に「2」を指定することで、
 反転後に先頭となる「.」を、InStr関数の判定対象から外した、と)

ですので、位置によらず「.」や「+」等を弾きたい場合は、上記関数は
不要です(汗)
(「InStr(StrReverse(指示数2), "+")」は「InStr(指示数2, "+")」で
 Ok、と)


【InStrについて】
この関数では、第4引数の指定により、全角/半角を同一とみなすか
どうかを指定できます。
(省略した場合は、モジュール先頭の「Option Compare ○○」での
 指定によって変化)

同一扱いにする場合は、
 InStr(1, 指示数, ".", vbTextCompare)
と、「vbTextCompare」(または「1」:クエリではこちらのみ有効)を
指定します。
なお、第4引数指定時は、第一引数(開始位置)も省略できなく
なるのでご注意下さい。


【数字以外を含むかどうかの判定法について】
小数点や正負の記号も含め、「0~9」の数字以外の全てを弾く
のでしたら、「Replace関数でそれらを消した後に文字が残るか
どうか」という判定方法もあるかと思いますので、参考までに・・・。
(以下、追加が必要になると思われる部分のみ記述。実際に
 組み込む場合は、適宜分割して、必要な場所に埋め込んで
 下さい:
 変数宣言は先頭、変換は「ElseIf~」の分岐の中、など)

Dim sRemain As String, i As Integer

'評価用の変数に入力値を記録
sRemain = 指示数2

'「0~9」の数字を全て空文字に変換
For i = 0 To 9
  '変換後の値を、同じ変数に再格納
  sRemain = Replace(sRemain, i, "")
Next

'数字全てを空文字に変換した後に、何らかの文字が残った場合
'(「1,,,,,,6」の場合、MsgBoxには「,,,,,,は入れては~」と表示されます)
If Len(sRemain) Then  '「0」以外は条件成立扱いになります
  MsgBox sRemain & "は入れてはいけません(>_<)" & vbCrLf & _
    "再入力してください", vbCritical, "エラー!!"
End If


※これとは別に、「正規表現」を使用する方法もあります。
  ただ、こちらはややとっつきにくいところがあるのと(→自分もまだ
  習得未了(汗))、「実際にどの文字が問題なのか」を表示する
  にはやや不適と思われますので、紹介のみに留めておきます(汗)
http://codezine.jp/article/detail/1655
http://officetanaka.net/excel/vba/tips/tips38.htm
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
【StrReverseについて】
ヘルプで見て内容は理解していました。
IsNumericが数値ではないのに
Trueを返してしまう文字の中に
123-
が有ります。
並び順をかえると-123
この時にためにStrReverseを使ったのかな?
と思っていました。

今よく見たら
123-
と入力した場合は
If InStr(2, StrReverse(指示数2), ".") Then
ではなく
ElseIf 指示数2 <= 0 Then
で判定されていました。(^_^.)

またIsNumericが数値ではないのにTrueを返してしまう
文字対策の方のずらずらと並べた方は
StrReverseをそのまま適用しましたが
第一引数を2ではなく省略しました。
ヘルプでは
省略→先頭から検索される
とあったので省略すれば
上から読んでも下から読んでも山本山
ではなく、どこに「+」「,」「D」「E」が有っても
検索可能だから逆でも大丈夫だと思いそのままにしました。

今試したら教えていただいたとうり
1.が通過してしまいます。(滝汗)
これはやばいです。
1.が通過すると後の方の処理で
VBEのエラー画面が出てしまい
使用者がパニくってしまいます。

(おかしいなあ。予想される入力は全部やってみたのですが。
 1.も試した(はじいた)記憶が....キット思い過ごしです。(^_^.)

【InStrについて】
ここでかなり悩んでしまいました。
数字で有るなら、全角でも半角でも通過させたかったからです。
全角で1.5だとはじいてくれなくて
ヘルプも見たのですが.....
今見直すと
「vbTextCompare 1 テキスト モードの比較を行います。」
とありますね。
テキスト→全角、半角の区別をしない
とは行き着きませんでした。

(-_-;)駄目ですね。
私はPC操作もエクセル使用も向いてないんです。
それなのにマクロをなんて、無理なんですよね。

絶対ここで質問しないと決めたのですが
本件は質問してしまったし.....。

今別件で悩んでます。(T_T)
構文の記述ではなく
どう処理するかが決めれなくて。

あっ。すいません。本件には関係ありませんね。

とりあえずリリースしてしまったので

「InStr(StrReverse(指示数2), "+")」
 ↓
「InStr(指示数2, "+")」
に修正してきます。

いろいろとありがとうございました。

お礼日時:2011/04/25 17:49

No.2です。



> インプットBOXに空白でOKを選択時は
> 入力忘れと仮定して
> 記述した「再入力を促すMsgBox」を表示させたいのです。

でしたら、VBAのInputBox関数からApplication.InputBoxに戻す必要がありますね(汗)

前回の回答に対して、以下のように改修すれば、ご希望の動作になるかと思います。

【現状(改修部分のみ抜粋・コメントは省略)】

  指示数 = InputBox("指示数を数字で入力してください")

  If 指示数 = "" Then

【改修後(抜粋部分を置き換え)】

  指示数 = Application.InputBox("指示数を数字で入力してください")

  If 指示数 = "" Then
    MsgBox "空白は指定できません"
  ElseIf 指示数 = "False" Then



・・・以上です。
取り急ぎ、参考まで。

この回答への補足

Do '指示数を変更する為に入力
指示数 = Application.InputBox(Prompt:="指示書に表示したい" _
& vbCrLf & "【指示数】" & vbCrLf & "を数字で入力してください")
If 指示数 = "" Then '(3)入力値確認分岐開始、空白でOKを押時
MsgBox "空白は指定できません(>_<)", vbCritical, "エラー!!"
ElseIf 指示数 = "False" Then '(3)分岐2種類目、キャンセル選択時
If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = _
vbOK Then
Call 定位置 'OK押時
Exit Sub
End If 'キャンセル押時
ElseIf IsNumeric(指示数) Then '(3)分岐3種類目、数値の場合
指示数2 = StrConv(指示数, vbNarrow) '全角→半角
'IsNumericがTrueを返した時の確認
If InStr(2, StrReverse(指示数2), ".") Then '小数指定時と123.56対応
MsgBox "小数点は駄目です。(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
ElseIf Len(指示数2) > 8 Then '桁数オーバー時
MsgBox "桁数が違います。(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
ElseIf 指示数2 <= 0 Then '負の数字と-123対応
MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr _
& "再入力してください", vbCritical, "エラー!!"
'IsNumericが数値ではないのにTrueを返してしまう文字の対策
ElseIf InStr(StrReverse(指示数2), "+") Then '+123と123+対応
MsgBox "+は入れてはいけません(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
ElseIf InStr(StrReverse(指示数2), "-") Then '123-対応
MsgBox "-は入れてはいけません(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
ElseIf InStr(StrReverse(指示数2), ",") Then '1,,,,,,6対応
MsgBox ",はいれては行けません(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
ElseIf InStr(StrReverse(指示数2), "E") Then '3E2対応
MsgBox "Eは入れてはいけません(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
ElseIf InStr(StrReverse(指示数2), "D") Then '3D2対応
MsgBox "Dは入れてはいけません(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
Else 'IsNumericがTrueを返した時の確認を全て通過した時
Exit Do 'Doを抜ける
End If
Else '(3)分岐4種目、数値以外
MsgBox "数値以外は駄目です(>_<)" & vbCr & _
"再入力してください", vbCritical, "エラー!!"
End If '(3)分岐終了
Loop

補足日時:2011/04/21 16:59
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳まりません。

>ご希望の動作になるかと思います。

はい。なりました。
インプットBOXには
全角、半角問わず(まじっても可)で
1~99999の整数以外の入力ははじきたいのですが
自分のやり方では
負の数字や0、小数点がはじかれないので
教えていただいた物を使う事にしました。

ただ
If InStr(2, StrReverse(指示数2), ".") Then
が全角では判定しないので
IsNumericが数値と判定した時点で全角を半角に
するようにしました。

ElseIf IsNumeric(指示数) Then '(3)分岐3種類目、数値の場合
指示数2 = StrConv(指示数, vbNarrow) '全角→半角

またIsNumericが数値ではないのにTrueを返してしまう

123.56
123,56
1,,,,,,6
.56
+123
-123
123+
123-
3E2
3D2
の対策で
LikeとかFindとかいろいろ試しましたが駄目でしたので
InStrを複数作成しました。
できあがった構文は
追記に入れました。
どうもありがとうございました。

お礼日時:2011/04/21 16:54

NO1です。


>全角でも半角でも受け付けるようにしています。
 ⇒この処理を前倒しにする方法がベターだと思います。
  余裕があれば、面倒ですがユーザフォームを作成して入力する方法は如何でしょうか。
  テキストボックスのプロパティからIMEモードや入力長制限を設定できますのでご検討
  下さい。(参考サイトのURL添付します)

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/
    • good
    • 0
この回答へのお礼

ありがとうございます。
今回教えていただいた内容ですが
現在の私の技量では
ちょっと難しくて対応が難しいです。
申し訳ありません。

お礼日時:2011/04/12 10:32

横レス失礼します。



「入力値を【数値とみなせる】か」は、IsNumeric関数で判定できますので、
Type引数は省略した上で、全チェックをマクロで行うのがよいかと思います。

Do
  指示数 = InputBox("指示数を数字で入力してください")

  'キャンセル/空白時
  If 指示数 = "" Then

    '取消の確認  ◆キャンセルの取消に対応してみました◆
    If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then
      Call 定位置
      Exit Sub
    End If

  '数値の場合
  ElseIf IsNumeric(指示数) Then

    '小数指定時
    If InStr(2, StrReverse(指示数), ".") Then
      MsgBox "整数を入力してください", vbCritical, "エラー!!"

    '桁数オーバー時
    ElseIf Len(指示数) > 8 Then
      MsgBox "桁数が違います。再入力してください", vbCritical, "エラー!!"

    'もし0や負の数も弾きたい場合は、以下の2行の先頭の「'」を外します
    'ElseIf 指示数 <= 0 Then
    '  MsgBox "正の整数を入力してください", vbCritical, "エラー!!"

    Else
      Exit Do

    End If

  '数値以外
  Else                 '【数値以外】
    MsgBox "数値を入力してください", vbCritical, "エラー!!"

  End If
Loop


【注意と説明】
・If文では、関数の戻り値が「0以外の整数」や「False」以外は、Trueと
 みなされるため、「IsNumeric」等に対する「=True」は省略しています。
・上では「Application.InputBox」ではなく、VBA関数のInputBoxを使用して
 います。キャンセル選択時の戻り値が異なるので注意してください。
 (今回は取消と空白の区別が不要のようでしたので、上記の通りとしました)
・小数かどうかは、「.」の有無で判定しています。
 但し、「1.」は「1」とみなすよう、末尾の「.」(→StrReverse関数で文字列を
 逆順に並べ替えると先頭)は、対象から外しました。
 なお、「1.0」も「1」とみなして許容する場合は、小数の判定部分を以下の
 ように変更すれば対応できます:

    '小数指定時
    If 指示数 <> CLng(指示数) Then

 ※強制的に整数化したものと元の値が同じなら整数、違えば小数、と。
  (InputBoxで「1.00」と指定しても、CLngの戻り値との比較時には
   数値とみなされて判定されるようです)
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご回答いただく前に
http://okwave.jp/qa/q2872556.html
にあった方法で

Typeを外して
If Len(指示数) <= 8 Then

If Len(収容数) <= 8 And IsNumeric(収容数) Then
にするだけで対応ができました。
4→半角でも
4→全角でも
Exit Doで次の処理にいけます。
また入力内容に数字以外があれば
記述した再入力を促すMsgBoxが表示されました。

ただし値が以下の場合、エラーにならないです。
以下の場合は
記述した再入力を促すMsgBoxが表示したいのですが
Exit Doでループを抜けて次の処理に行ってしまいます。

123.56
123,56
1,,,,,,6
.56
+123
-123
123+
123-
3E2
3D2

教えていただいた記述をそのまま使わせていただきました。
インプットBOXに空白でOKを選択した場合
「入力した数式は正しくありません」は表示しなくなりましたが
キャンセル選択時同様最終的には
Exit Subになってしまいました。
インプットBOXに空白でOKを選択時は
入力忘れと仮定して
記述した「再入力を促すMsgBox」を表示させたいのです。
ちょっとわがままな仕様かもしれません。
どうもありがとうございました。

お礼日時:2011/04/12 10:30

InputメソッドのTypeを外し、次のコードを変更で如何でしょうか。


If Len(指示数) <= 8 Then ⇒ If Len(指示数) <= 8 And Val(指示数) Then 

この回答への補足

申し訳ありません。

Val関数は
文字列に数字以外があった場合読込を止める
とヘルプにありました。

12345ABCと入力すると
12345だけが返り8文字以内なので
次の処理へ移りますが
12345678のつもりで
12345ABCと入力したと仮定しなければ
なりませんのでエラーでないとまずいのです。
同じく
123456の所
123X56と誤って入力した場合
123だけが返ってしまい次の処理に移ってしまいます。

インプットBoxへの入力は
・1文字~8文字以内でそれ以外はエラー
・整数である事
・入力内に数字以外があったらエラー
・整数なら全角でも半角でもOK
・空白でOKを選択してもエラー
・エラーは記述したMsgBoxを表示

としたいのですが、やはりType:=1を入れるべきでしょうか?
これなら空白でOKを選択した時意外は
思ったとおりの動きなんですが....

補足日時:2011/04/08 11:09
    • good
    • 0
この回答へのお礼

ありがとうございます。

空白でOKを選択すると
記述したMsgBoxが表示されました。
また数値以外が入っていても
記述したMsgBoxが表示されました。
ただ
4と半角なら通過しますが
4と全角だとはねられて
記述したMsgBoxが表示されてしまいます。

次の処理で
指示数2 = StrConv(指示数, vbNarrow) '全角→半角
があり
インプットBOXへの入力は
数字1文字以上8文字以内なら
全角でも半角でも受け付けるようにしています。
(入力者がPC苦手でひらがなのまま数字入力する場合が
 あり入力者は正しいと思っている。)
よって全角ではねられると作業者から呼ばれるので
それが困りました。

お礼日時:2011/04/08 10:21

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q退職祝いにプリザーブドフラワーor生花か迷っています

同僚の退職祝いにプリザーブドフラワーor生花か迷っています
プリザーブドフラワーをプレゼントしたいと思っていたのですが
ネットで画像や口コミをみて迷ってしまいました
予算が約5千円なので小さいプリザーブドフラワーしか買えない様に感じました
だったら生花の花束の方が 同じ5千円でもかなり立派なのが買えますよね・・・
でも長い間楽しんでもらえるプリザーブドフラワーの方が
もらった時のインパクトは弱くなるかもしれないけど
後々喜んでもらえる気がするのです
退職される方は30歳女性(寿退職)です
プリザーブドフラワーの事も知ってるので
多少見た目がしょぼくても、安物と感じる事は無いと思います
でもやっぱり、ゴージャスな花束の方が喜んでもらえるのでしょうか?

Aベストアンサー

私なら生花が欲しいです。

本当に物を大切にする人は、人から物を貰うことが苦手、と聞いたことがあります。
もちろん、気持ちは嬉しいと思うのですが、捨てるに捨てられないから困ってしまうそう。

ブリザードフラワーもいろいろな色の花がありますよね。
長く置いてつかう物こそ、自分の好みにあった物で住まいの雰囲気にあった物が欲しいと思うのです。

あと、ドライフラワーを飾るのは良くないと聞いたことがあります。
死んだ花だから、だとか。
そういう意味ではブリザードフラワーも生きている花とは言いがたいかも知れないですね。

なんだか年寄りくさいですね。
でも、こういった意見もある・・ということで。

Q関数 ="("&数値&")" と入力したときの数値の扱い

単純な質問の上、確認だけになるかもしれませんが、ご存知の方いらっしゃいましたらお願いします。

例えば
セルの値 A1:10 B1:20 A2:100 B2:200
セル C1に="("&A1+B1&")" セルの表示は(30)
セル C2に="("&A2+B2&")" セルの表示は(300)
という関数が入力されていて結果が表示されているとします。
セル C3に=C1+C2 とした場合、セルの表示結果は-330となり、こちらが思っていた330とは表示されませんでした。その為、計算結果が正しくえられるためには、セル C3に=-(C1+C2)と入力する必要があります。

これは、単純に括弧で括られた値を【マイナス数値】として判断した結果ということでしょうか?どうしてマイナスと扱われるのでしょうか?

書式設定でも括弧付きで表示は可能で、計算結果もこちらが思うとおりにえられるのですが、事情があり書式設定を使用しておりません。

どなたかご存知の方おられましたら、ご回答いただきますと嬉しいです。
よろしくお願いいたします。

Aベストアンサー

こんばんは。

>事情があり書式設定を使用しておりません。
ちょっと、その事情が気になりました。
たぶん、仮の計算と実の計算が混じっているという意味では?
私たちは、そうしますね。書式で行うのは、とんでもないことになってしまいますから、それは出来ませんね。

>どうしてマイナスと扱われるのでしょうか?
というか、たぶん、アメリカに限られるでしょうけれども、マイナスを括弧でくくる商習慣があるからでしょうね。イギリスは知りません。ヨーロッパ(ドイツ語圏)にはありませんが、マイナスが、数字の後ろにつけられることがありますね。あちらは、コンマとピリオドが逆になったりします。

=SUMPRODUCT(SUBSTITUTE(SUBSTITUTE(C1:C2,"(",""),")","")*1)

減算まで含めると、こうするしかないような気がします。
例:
  10    20   (30)
 100  -200  (-100)
            -70
             

Qプリザーブドフラワー

プリザーブドフラワー

先ほども質問した、担任の先生の誕生日プレゼントなんですが、
いろいろ調べていて、プリザーブドフラワーがいいと思ったのですが、
近くにある花屋に行けば買うことができますか?
また、1000円台の値段で買うことができますか?

回答よろしくお願いします。

Aベストアンサー

プリザーブドフラワーは綺麗で贈り物にはピッタリですね!

花屋さんは置いてるとこもあれば、置いていないとこもあります。
お花屋さん以外にも雑貨屋さんにもアレンジされたものが
よく置いてありますので、
お友達と見に行ってみて下さい。

プリザーブドフラワーの相場は高いので、
お店を探してみてなければ、
ネットでの購入も検討してみて下さい。
リンク先は送料込みで1000円台です。

参考URL:http://www.rakuten.co.jp/arona/index.html

Q入力セルが空白の時 隣りと隣のセル(こちらも入力セル)を空白にできるかどうか?

こういったことできないでしょうか。

 A1  B2  C3
9:00  ~  10:00 と場合に

A1とC3に直接値を入力しています。

A1セルに値がはいらないとき B2のチルダも C3の値も 空白になってくれると
よいなと思うのですが 良い方法はありますでしょうか。

ご存知の方ご教示いただければ助かります。

Aベストアンサー

こんばんは!

>C3のセルのことを B2に入力した式で
>管理できないかと思っているのですが・・・

関数では無理だと思います。
VBAになりますが一例です。

画面左下の操作したいシート見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
A1・C3セルにデータを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) '//この行から//
If Intersect(Target, Range("A1,C3")) Is Nothing Then Exit Sub
If Target.Count = 1 Then
With Target
If .Row = 1 Then
If .Value <> "" Then
If Range("C3") <> "" Then
Range("B2") = "~"
End If
Else
Range("B2,C3").ClearContents
End If
Else
If .Value <> "" Then
Range("B2") = "~"
Else
Range("B2").ClearContents
End If
End If
End With
End If
End Sub '//この行まで//

※ A1セルがC3セルより大きな値になった場合などの細かいエラー処理はしていません。

こんな感じをお望みなのでしょうか?m(_ _)m

こんばんは!

>C3のセルのことを B2に入力した式で
>管理できないかと思っているのですが・・・

関数では無理だと思います。
VBAになりますが一例です。

画面左下の操作したいシート見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
A1・C3セルにデータを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) '//この行から//
If Intersect(Target, Range("A1,C3")) ...続きを読む

Qプリザーブドフラワーを作りたいのですが。

結婚式のサプライズで新婦の好きな花、ラナンキュラスを使ってプリザーブドフラワーを作りたいのですが、今の時期ラナンキュラスを購入するにはどこへ行けばいいでしょうか?
また、ラナンキュラスをプリザーブドフラワーにすることはそもそも可能でしょうか? 

Aベストアンサー

残念ながら、ラナンキュラスはプリザーブドには加工できない花の一つです。できたとしても春の花なので、今は球根しか店頭にはでていません。(きのう花の卸屋さんにシクラメンの切り花がありましたので、どこかにはあるかもしれませんが。)

サプライズはあきらめるしかないですね。

花が入手できたとして、シリカゲルでドライフラワーにするという方法も可能性としてはあります。
けれどもバラなどと比べると水分の多いお花なので、茎がネックになりそうな…。
すみません。私も作ったことはないんですけど。

Qエクセル:データーの入ったセルに空白行をカウントした数値を入力するには

今日は、始めて質問します。VBAで下記のようなセルに空白行をカウントして数字を入れたいのですが、構文、式がまったく解りません。よろしくお願いします。
  A  B  C
1
2 5←        A2=5の数字はA1からカウントすると2になるので、2と入れたい。
3    ○←     B3=○をB1からカウントして3になるので、3と入れたい。
4       ○← C4=○をC1からカウントして4になるので、4と入れたい。
5 ○←      A5=○をA2からカウントして3になるので、3を入れたい。
6
7       ○← C7=○をC4からカウントして3になるので、3と入れたい。
8       ○← C8=○をC7からカウントして1になるので、1と入れたい。
9 ○←      A9=○をA5からカウントして4になるので、4を入れたい。

Aベストアンサー

いくつか方法はあるとは思いますが、結果的には、間の行で計算するのが楽のような気がします。これは、今まである所に、上書きになります。

'標準モジュール

Sub BetweenCountCells()
Dim i As Long, b As Long, f As Long
Dim c As Variant
With ActiveSheet
For i = 1 To 3 '検査する列
f = 0 '初期値
For Each c In .Range(.Cells(1, i), .Cells(Rows.Count, i).End(xlUp))
  If c.Value <> "" Then
   b = c.Row
   c.Value = b - f
   f = b
  End If
Next c
Next i
End With
End Sub

Q今月誕生日の彼女にプリザーブドフラワーをプレゼントしようと考えています

今月誕生日の彼女にプリザーブドフラワーをプレゼントしようと考えています。
プリザーブドフラワーをネット通販で購入し、彼女宅に送ろうと思っているのですが、
どのような物がいいのか分からなく困っています。
実際に誕生日プレゼントでプリザーブドフラワーを貰った人や、あげた人は
どのような物をもらいましたか?

またその時の感想や、良い通販サイトを知っている人は教えていただけるとありがたいです。

ちなみに1年近く付き合っており、二人とも18歳の大学生で、遠距離してます。

早めの回答よろしくお願いします。

Aベストアンサー

プリザーブドフラワーは買った事がないのですが、
もらった時は、ハンズの包み紙に入っていたような覚えがあります。
http://item.rakuten.co.jp/blossom87/p-sh-0100/
こんな感じのちょっとしたものでした。まだ飾ってありますよ。数年前にもらいましたけど。

このあたりなんてかわいいかも。
http://item.rakuten.co.jp/hanayoshi/c/0000000121/
 
ネットでお花なら、日比谷花壇はきれいなサイトで買いやすく、少し高いですが質はいいです。
http://www.hibiyakadan.com/preserved
あと有名なところでは、第一園芸とか。
http://item.rakuten.co.jp/e-hana/c/0000000119/
プリザーブドフラワー専門店もたくさんあります。
http://www.rakuten.ne.jp/gold/fine-flower/

プリザーブドフラワーは半永久的なだけあって基本的にちょっとお高めなのです。
ちなみにプリザと略すこともあります。 
 
彼女にお花プレゼントなんてすてきな彼氏ですね。
ぜひ良いお花を見つけて贈ってあげてください。

プリザーブドフラワーは買った事がないのですが、
もらった時は、ハンズの包み紙に入っていたような覚えがあります。
http://item.rakuten.co.jp/blossom87/p-sh-0100/
こんな感じのちょっとしたものでした。まだ飾ってありますよ。数年前にもらいましたけど。

このあたりなんてかわいいかも。
http://item.rakuten.co.jp/hanayoshi/c/0000000121/
 
ネットでお花なら、日比谷花壇はきれいなサイトで買いやすく、少し高いですが質はいいです。
http://www.hibiyakadan.com/preserved
あと有名なところでは、第一...続きを読む

Qマクロで数値と数値の間に空白を入れるには?

よろしくお願いします。いつもgooの皆さんに大変お世話になっています
お陰様で、本では全く入門できなかったマクロも、この1年ちょっとでゼロから大変進歩できました

win8.1でエクセルは2013です

質問内容
マクロで数値と数値の間に空白を入れるコードを教えてください

例 60012308→6 0 0 1 2 3 0 8
例のように半角数値に空白を入れたいのですがコードが全く思いつきません

1の位の右側(例では8の右側)には空白はできれば入れたくありません
桁数は一定ではありません
空白を入れたら当然、数値が文字になるかと思いますが、それで構いません

よろしくお願いします

Aベストアンサー

数値を文字列に変換しておいて、左から一文字づつ空白を入れてゆく考え方でどうでしょうか?


例えば、A1に入力されている値を処理する場合の例です。
Sub test()
 Dim txt As String, res As String, i As Integer

 txt = Range("A1").Text

 res = Left(txt, 1)
 For i = 2 To Len(txt)
  res = res & " " & Mid(txt, i, 1)
 Next i

 MsgBox res
End Sub

Qプリザーブドフラワーを習いたいのですが

こんにちわ
1)学校について
都内でプリザーブドフラワーの学校でおススメはありませんか?
アレンジだけじゃなくて、花を専用の薬につけて加工?するところから
勉強してみたいのですが。

2)通信か通学か
通信教育という手もあるかと思いますが、
通信と通学、どちらの方がいいのでしょうか。
メリット、デメリットなど教えていただけると幸いです。

3)プリザーブドフラワーに関する資格
プリザーブドフラワーの認定資格はありますか?
関連して持っておくとよい資格などあったら教えて頂きたいのですが。

以上、宜しくお願い致します。

Aベストアンサー

追加です。
通信か通学か・・・私は通学をおすすめします。
私はアレンジだけ(アレンジだけでも基本の取り扱い方
は独学よりも直接教えてもらった方がわかりやすいです)をやっていますが、他の生徒さんの様子を見ていると教本だけではイメージしにくいところがありそうです。
こうした方がアレンジが生きる・・・というようなことは
実際に教えてもらわないとわかりにくい部分だと思います。
デメリットは、人気の教室では自分の望んだ日にちや時間
に入れられないとこともあるというようなことでしょうか。
資格は各団体での認定ということになると思います。いろいろな団体でのアレンジを体験して、自分の好みの教室で
資格取得の講座を取るのがいいと思います。

Q検索する値が空白の際は空白にして、VLOOKUPで[OK]と表示したい

色々試しましたがどうにもわからなくて
よろしくお願いします。

Sheet1のA列に検索する値が入っています。
B~D列にはチェック項目があり、
それぞれSheet2のデータをVLOOKUPで抽出しています(Sheet2は大元のデータで、値は数字ではなく[*]が入っています)

Sheet1のB~D列の式は
A列が空白の際は空白表示にしたいので
例えばB列には下記のように入力しています。

=IF(A1="","",VLOOKUP(A1,Sheet2!A:F,2,FALSE)

また、E列にはB~Fのどこかに[*]があれば[OK]と表示したいので下の式を入れています。

=IF(COUNTIF(B1:D1,"*"),"OK","")

困っているのはA列の検索する値がSheet2のデータにないときに[#N/A]と表示されて見にくくなっていることです。

そこでB列に入れる式を下の様に入れてみたのですが
今度はE列が[*]がないのに[OK]と表示されてしまいます。
IF(ISNA((A1="","",VLOOKUP(A1Sheet2!A:D,2,FALSE),"",IF(A1="","",VLOOKUP(A1,Sheet2!A:D,2,FALSE)

記号だからダメなのかと思い、下の式を入れて
試しに[*]ではなく[有]で表示にすると上手くE列でOK 表示できたのですが、今度はA列が空白の時に[#N/A]となってしまいます。

=IF(VLOOKUP(A1,Sheet2!A:F,2,FALSE),"有"."")

ちなみに下の式を入れてみたところ、"有"の部分がエラーになっているようでした。

=IF(A1="","",VLOOKUP(A1,Sheet2!A:F,2,FALSE),"有"."")

色々分かりにくくて申し訳ありませんが
どうぞよろしくお願いします。

色々試しましたがどうにもわからなくて
よろしくお願いします。

Sheet1のA列に検索する値が入っています。
B~D列にはチェック項目があり、
それぞれSheet2のデータをVLOOKUPで抽出しています(Sheet2は大元のデータで、値は数字ではなく[*]が入っています)

Sheet1のB~D列の式は
A列が空白の際は空白表示にしたいので
例えばB列には下記のように入力しています。

=IF(A1="","",VLOOKUP(A1,Sheet2!A:F,2,FALSE)

また、E列にはB~Fのどこかに[*]があれば[OK]と表示したいので下の式を入れています...続きを読む

Aベストアンサー

B1の式
=IF($A1="","",IF(ISNA(VLOOKUP($A1,Sheet2!$A:$F,2,FALSE)),"",VLOOKUP($A1,Sheet2!$A:$F,2,FALSE)))
をB~D列へコピー。B1:D1を下までコピー。
で、いかがでしょうか。

あと、E列の式は =IF(COUNTIF(B1:D1,"*"),"OK","") で上手く動いていますか?
=IF(COUNTIF(B1:D1,"[*]")>0,"OK","")
ではないかと思うのですが。


人気Q&Aランキング

おすすめ情報