[[20060929154917]] 『入力制限の応用』(つまり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『入力制限の応用』(つまり)

 ひとつのセルに半角15文字までしか入らないように設定してあります。

 【入力規則】
 ユーザー設定 
 =(LEN(H8)=LENB(H8))*(LENB(H8)<=15)

 この場合、16文字以上入力するとエラーメッセージが出ますが、
 自分で数えないとどの文字までが15文字までなのか分からなく苦戦しています。

 セルを15作ってもダメですし…
 何をどうしたらいいのかさっぱり分からないのですが、
 なにかいい方法はないでしょうか?

 こんな聞き方で申し訳ないのですが、教えてください。
 お願いします。

 >何をどうしたらいいのかさっぱり分からないのですが、
 う〜ん。。。
 多分、他の方も「何をどうしたいのか」わからないと思います。
 
 なぜ、半角15文字までの入力にしたいのでしょう?
 それがわかれば、解決策(入力制限以外で)があるかもしれませんね〜^^
 
 (キリキ)(〃⌒o⌒)b

 おそらく、入力中の文字数をカウントをしたいのでしょう...
 無理だと思いますよ...(seiya)

 σ(^o^;)は、こう言う事かと思いました^^;
 
[[20060204162136]]『折り返し?』(&)
 
 (キリキ)(〃⌒o⌒)b

エクセルで作ったデータを配布して入力してもらい、
 システムに入力しなおすんですが、
 そのシステムで、半角カタカナ15文字までしか入らない箇所があるんです。

 自分で15文字数えて入力するよりも、
 エクセルのデータをその条件で作っておけば楽かなーと思ったんですけど。。。

 ちなみに別のシステムでも同じ様に半角カタカナ15文字で入力しなければならない  も のがあるんですが、
 そのシステムでは、点線の下線を引いたような感じで15文字分の「.」が打ってあ り、どこまで打てば15文字か分かって便利です。

 こんな感じなんですが、、、お分かりいただけますでしょうか?

 (つまり)


 元のデータ範囲を選択して、下記のマクロを実行してみて下さい。
 16文字目以降が赤くなります。
 って、こんなことですかね? はずしてたらすみません。
(純丸)(o^-')b
 
 Sub test()
    Dim r As Range
    Application.ScreenUpdating = False
    For Each r In Selection
       r.Characters(Start:=16, Length:=100).Font.ColorIndex = 3
    Next r
    Application.ScreenUpdating = True
 End Sub


 ユーザーフォームのテキストボックスを使って入力すれば、
 テキストボックスのチェンジイベントを使えば、15文字入力した時点で
 止めることは可能かも・・・?
 ついでに、その上にラベルでも配置して、文字数を表示していくとか・・・。
 でも、そこまでするのもどうかな・・(^_^A;

 (川野鮎太郎)


 こんな方法では外してますか?
 
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range
Dim MyStr As String
Dim Flg As Boolean
    Flg = False
    MyStr = "***************"
    Set Rng = Range("A1:A10")
    If Intersect(Target, Rng) Is Nothing Then Exit Sub
    Do
        MyStr = InputBox("15文字以内で、文字を入力してください", , MyStr)
        If Len(MyStr) < 16 Or MyStr = Empty Then
            Flg = True
        End If
    Loop Until Flg = True
    Target = IIf(MyStr = "***************", "", MyStr)
    Set Rng = Nothing
End Sub
 
 (キリキ)(〃⌒o⌒)b

 赤くなるのとかすばらしいと思うんですが、
 マクロの実行を行うのは、課員にちょっと負担かなと思います・・・
 出来ない人もいると思うので。
 テキストボックスを試してみたいのですが、、、
 探しても見当たらないのですが、、、どこにあるんでしょうか?
 (つまり)

 テキストボックス発見しましたが、、その続きの作業がわかりません。
 教えていただけないでしょうか?
 (つまり)

 >マクロの実行を行うのは、課員にちょっと負担かなと思います・・・
 負担と言われると、何にもいえませんが。。。
 
 >出来ない人もいると思うので。
 今回、σ(^o^;)が提案したものは、
 Worksheet_SelectionChange イベントですので、自動的に処理されるものです。
 色は付きませんが、、、
 
 お時間があったら、お試しくださいな^^
 (キリキ)(〃⌒o⌒)b


 見つけられたテキストボックスはどこにあったのでしょうか・・・。
 コントロールツールボックスのテキストボックスなら、
 デザインモードにして、コードの表示
 出てきたVBEの画面に、以下のコードを貼り付け
Private Sub TextBox1_Change()
myLen = Len(Me.TextBox1.Text)
If myLen >= 15 Then
    MsgBox ("はい、ここまでよ。")
End If
Range("E1").Value = myLen
End Sub

 (川野鮎太郎)※ただし、入力モードになっている場合は確定されないのでダメです。

 川野さん、出来たんですが半角で15文字以上入ってしまいます。
 それと、文字の大きさは変えられますでしょうか?
 (つまり)


 でも、入力した後をどうするのか・・・。
Private Sub TextBox1_Change()
With Me.TextBox1
    .MaxLength = 15
    .Font.Size = 20 '20ポイント
    myLen = Len(.Text)
    If myLen >= 15 Then
        MsgBox ("はい、ここまでよ。")
    End If
End With
    Range("E1").Value = myLen
End Sub

 (川野鮎太郎)

 補足〜
 
 σ(^o^;)のコードは、シートモジュールにコピペしてください。
 シートモジュールは、
 \Sheet1/
  ↑ここを右クリック → コードの表示 
   出てきた画面に、上記コードをコピペです。
 
 範囲は、
 >Set Rng = Range("A1:A10") 
                  ~~~~~~~~
 の部分をお好きな範囲に書き換えてください。
 
 (キリキ)(〃⌒o⌒)b


 キリキっちのコードがおもしろいので、ちょっといじってみました。
 勝手にごめんです。
 
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim Rng As Range
 Dim MyStr As String
 Dim Flg As Boolean  
 Dim mojisu As String
   Flg = False
   If Target.Value = "" Then
       MyStr = "***************"
       mojisu = ""
   Else: MyStr = Target.Value
       mojisu = "今は " & Len(MyStr) & " 文字ありまっせ!"
   End If
   Set Rng = Range("A1:A10")
   If Intersect(Target, Rng) Is Nothing Then Exit Sub
   Do
       MyStr = InputBox("15文字以内で、文字を入力してください" & Chr(10) &  mojisu, , MyStr)
       If Len(MyStr) < 16 Or MyStr = Empty Then
           Flg = True
       End If
       mojisu = "今は " & Len(MyStr) & " 文字ありまっせ!"
   Loop Until Flg = True
   Target = IIf(MyStr = "***************", "", MyStr)
   Set Rng = Nothing
 End Sub

 でも、よく見たら質問者さんの希望は、「半角15文字」でしたね。
 キリキさん、改良して m(__)m
(純丸)(o^-')b

 >キリキさん、改良して m(__)m
 純丸さんのほうが、面白い^^
 こんな感じでいいのかな〜?
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range
Dim MyStr As String
Dim Flg As Boolean
Dim mojisu As String
    If Target.Count <> 1 Then Exit Sub
    Flg = False
    If Target.Value = "" Then
        MyStr = "***************"
        mojisu = ""
    Else: MyStr = Target.Value
        mojisu = "今は " & LenB(StrConv(MyStr, vbFromUnicode)) & " 文字ありまっせ!"
    End If
    Set Rng = Range("A1:A10")
    If Intersect(Target, Rng) Is Nothing Then Exit Sub
    Do
        MyStr = InputBox("15文字以内で、文字を入力してください" & Chr(10) & mojisu, , MyStr)
        If LenB(StrConv(MyStr, vbFromUnicode)) < 16 Or MyStr = Empty Then
            Flg = True
        End If
        mojisu = "今は " & LenB(StrConv(MyStr, vbFromUnicode)) & " 文字ありまっせ!"
    Loop Until Flg = True
    Target = IIf(MyStr = "***************", "", MyStr)
    Set Rng = Nothing
End Sub


 う〜〜ついていけませんでした(>_<)
 ちょっと勉強してやってみますぅ〜
 返事が遅くなるかもしれませんが、
 続けてやってみます!
 ありがとうございました!

 「入力文字を確定して計算させる」必要がありますが
 隣のセルに左から15文字目までを表示させて(LEFT関数)
 どこまでが15文字に収まるのか確認する
 (15文字を超えていたらセルに色を付けて警告)
 とかじゃダメですかね?

 或いは、等幅フォントにして、入力セルの下のセルに
 15文字の「-」なり「・」なり入力して於いて
 参考にしながら文字を入れる・・・・とか。

 (HANA)


 HANAさんのやり方、詳しく教えていただいてもいいですか?
 (つまり)

 えっと・・・作業列(行)が使える場合ですが

 1.LEFT関数を使って
    A1=ABCDEFGHIJKLMNOPQ (17文字)入力されているとき
    B1=LEFT(A1,15) としておくと結果は
       ABCDEFGHIJKLMNO (15文字まで表示)になる
    と言うだけなのですが・・・。

    C1=IF(LEN(A1)>15,(LEN(A1)-15)&"文字超過","") としておくと
       2文字超過(←結果)
    何文字超えているか出せますね。

    A1セルを選んで、メニュー・書式→条件付き書式 で
    [数式が  ▼][=LEN(A1)>15     ]
    で、[書式]→パターンで「赤」等しておくと
    A1セルの文字が15文字より多くなるとセルが赤くなります。

 2.等幅フォントを使って
    フォントに「P」が付いているもの(MS Pゴシック 等)は
    フォント幅を見栄えよく変えてくれます。(Aは狭く、Wは広く)
    Pがついていないフォントを使うと、フォント幅は全て同じになるので
    A1=ABCDEFGHIJKLMNOPQ
    A2=・・・・・・・・・・・・・・・ (←ここを参考に入力しておく)
    入力するときの目安になると思います。

 ・・・とか言うへぼへぼ案です。
 積極的に「入力出来ないように」ではなく
 「訂正するときの目安に」するためにしか使えません。

 もしかして、15文字を超えた場合
 「15文字に収まるように良いように変更する」ではなく
 「無条件で先頭から15文字を残せばいい」のですかね?
 それなら、LEFT関数だけで良さそうですが。

 (HANA)

 HANAさん、ありがとうございます!
 1の方法で希望通りのモノが出来ました〜♪
(つまり)

 それは良かったです。
 ちなみに、キリキさんご提案の
 >Worksheet_SelectionChange イベントですので、自動的に処理されるものです。
 はどうだったでしょうか?

 私の提示した方法だと、「うっかり関数をコピーするのを忘れてて」15文字以上。とか
 「赤くなってるけど業務に紛れて」15文字以上・・・とか。
 ポカよけは出来ません。
 でもキリキさんの方法だと、どう頑張っても15文字迄しか入らない様になっています。
 改良版で今は「○○ 文字ありまっせ!」と入力文字数が出ますが
 「○○文字超過でっせ!」と表示させる事も可能と思います。

 コードを提示されたときは
 >ちょっと勉強してやってみますぅ〜
 よりも、
 1.とりあえず言われたとおりにやってみる。
 2.おもしろそうなら勉強する。(&分かるところだけ分かる)
 の順番の方が取っつきやすいような気がします。

 (HANA)


 キリキさんに教えていただいたものチャレンジしてみたんですが、
 初・チャレンジでよくわからないのですが、
 基本的なことを聞いてもいいでしょうか?
 Option Explicit
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim Rng As Range
 Dim MyStr As String
 Dim Flg As Boolean
     Flg = False
     MyStr = "***************"
     Set Rng = Range("A1:A10")
     If Intersect(Target, Rng) Is Nothing Then Exit Sub
     Do
         MyStr = InputBox("15文字以内で、文字を入力してください", , MyStr)
         If Len(MyStr) < 16 Or MyStr = Empty Then
             Flg = True
         End If
     Loop Until Flg = True
     Target = IIf(MyStr = "***************", "", MyStr)
     Set Rng = Nothing
 End Sub

 ↑このコードは…A1:A10に15文字以内で〜と出れば出来てるってことでよいですか?
 ちなみに、J7に件名を入力、J8に半角カタカナ15文字以内でふりがなを入れたいんですが
 その時はJ8:J8に変えるんでいいのでしょうか?

 で、次に最後のコードを試したんですが、
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim Rng As Range
 Dim MyStr As String
 Dim Flg As Boolean
 Dim mojisu As String
     If Target.Count <> 1 Then Exit Sub
     Flg = False
     If Target.Value = "" Then
         MyStr = "***************"
         mojisu = ""
     Else: MyStr = Target.Value
         mojisu = "今は " & LenB(StrConv(MyStr, vbFromUnicode)) & " 文字ありまっせ!"
     End If
     Set Rng = Range("A1:A10")
     If Intersect(Target, Rng) Is Nothing Then Exit Sub
     Do
         MyStr = InputBox("15文字以内で、文字を入力してください" & Chr(10) & mojisu, , MyStr)
         If LenB(StrConv(MyStr, vbFromUnicode)) < 16 Or MyStr = Empty Then
             Flg = True
         End If
         mojisu = "今は " & LenB(StrConv(MyStr, vbFromUnicode)) & " 文字ありまっせ!"
     Loop Until Flg = True
     Target = IIf(MyStr = "***************", "", MyStr)
     Set Rng = Nothing 
 End Sub

 これは、シートからコードの表示という先程のやり方とは違うんでしょうか?

 コードを提示された時の手順が分からないので、
 そこから教えていただいてもいいでしょうか?

 すみませんが、よろしくお願いします。

 つまり


 >↑このコードは…A1:A10に15文字以内で〜と出れば出来てるってことでよいですか?
 「15文字以内で、文字を入力してください」と、メッセージが出るということは、
 15文字以上入力してしまったということですので、コードは機能していますが、15文字以内での入力はできていません。
 
 >ちなみに、J7に件名を入力、J8に半角カタカナ15文字以内でふりがなを入れたいんですが
 >その時はJ8:J8に変えるんでいいのでしょうか?
 Range("J8")
 だけで大丈夫ですね^^
 
 >これは、シートからコードの表示という先程のやり方とは違うんでしょうか?
  シートモジュールは、
 \Sheet1/
  ↑ここを右クリック → コードの表示 
   出てきた画面に、上記コードをコピペです。
 という作業の事ですね?
 同じ作業ですよ^^
 但し、最初のコードは消しちゃってください。
 どちらか一つが入っていればOKです。
 
 (キリキ)(〃⌒o⌒)b


 キリキさん、ありがとうございます。
 一つ目のコードはちゃんと出来てるようです。
 15文字以内ならメッセージもなくふりがなが入力されます。

 二つ目のコードなんですが、
 お教え頂いた通りやってるんですが、J8のセルがうんともすんとも変化なしなんです。
 前のコードも消してるんですが・・・なぜでしょうか?

 つまり

 >お教え頂いた通りやってるんですが、J8のセルがうんともすんとも変化なしなんです。
 >前のコードも消してるんですが・・・なぜでしょうか?
 そうですか〜
 一旦、保存し終了してから、再度立ち上げて作業をしてみるとどうなりますでしょうか?
 
 (キリキ)(〃⌒o⌒)b

 
 >一旦、保存し終了してから、再度立ち上げて作業をしてみるとどうなりますでしょうか?
 やってみたんですが、、、変化なしです。
 J8にふり仮名を入れたら、今何文字でっせとか15文字以内で入力して下さい、
というメッセージが出るんですよね・・・?

 つまり


 おかしいですね。。。
 
 もう一度、そのシートモジュールを削除してから
 下記をコピペしてもらっても良いでしょうか?
 
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range
Dim MyStr As String
Dim Flg As Boolean
Dim mojisu As String
    If Target.Count <> 1 Then Exit Sub
    Flg = False
    If Target.Value = "" Then
        MyStr = "***************"
        mojisu = ""
    Else: MyStr = Target.Value
        mojisu = "今は " & LenB(StrConv(MyStr, vbFromUnicode)) & " 文字ありまっせ!"
    End If
    Set Rng = Range("J8")
    If Intersect(Target, Rng) Is Nothing Then Exit Sub
    Do
        MyStr = InputBox("15文字以内で、文字を入力してください" & Chr(10) & mojisu, , MyStr)
        If LenB(StrConv(MyStr, vbFromUnicode)) < 16 Or MyStr = Empty Then
            Flg = True
        End If
        mojisu = "今は " & LenB(StrConv(MyStr, vbFromUnicode)) & " 文字ありまっせ!"
    Loop Until Flg = True
    Target = IIf(MyStr = "***************", "", MyStr)
    Set Rng = Nothing
End Sub
 
 そのシートのシートモジュールには、上記だけが入っているようにしてください。
 
 (キリキ)(〃⌒o⌒)b

 キリキさん、やはり出来ないです・・・。
 キリキさんがJ8に変えてくださっているので私はコピペのみでいいんですよね?
 J8には条件付書式も入力規則も入っていないのですが・・・
 (もし入っていたらダメとかありますか?)
 また他のシートに保護がかかっているとダメということはありますか?

 つまり


 どうしてでしょうね〜???
 
 条件付書式や入力規則・保護等は関係ないと思いますが、、、
 
 以下の手順で確認してみてください。
1)シートタブ右クリック → コードの表示で、Microsoft Visual Basic を立ち上げる
2)すでに入っている、コードの
  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  の部分にカーソルを持っていき【F9】を押す
  ※【F9】を押すと、その行が茶色く反転し、左端に「●」が付きますよね?
3)Microsoft Visual Basic を、「×」などで終了し、エクセル画面に戻る
4)何処でもいいから、セルをクリック
  ここで、命令が生きていれば Microsoft Visual Basic が自動的に立ち上がり
  先ほどの茶色い部分が黄色になります。
5)【F8】を押すと、コードを上から順に命令させることが出来ますので
  何処の部分で、終了するかを見てください。
 
※4)で、何も起きないようでしたら、標準モジュールに下記コードを記入(コピペ)
 標準モジュールは、Microsoft Visual Basic の、挿入 → 標準モジュール で、出てくる白い画面の事です。
 
Sub 解除()
Application.EnableEvents = True
End Sub
 
その後、エクセル画面に戻り、Alt + F8 を押して
「解除」を選択し、実行してみてから作業を行ってみてください。
 
 (キリキ)(〃⌒o⌒)b

 
 >5)【F8】を押すと、コードを上から順に命令させることが出来ますので
  何処の部分で、終了するかを見てください。
 If Target.Count <> 1 Then
 ↑ここが黄色になりました。

 >その後、エクセル画面に戻り、
 ×で戻っていいんでしょうか?
 このコマンドを使うとデバックは中断します。
 と出ますがOKでいいんでしょうか?

 お手間かけてしまってすみません・・・
 つまり


 >If Target.Count <> 1 Then
 >↑ここが黄色になりました。
 【F8】を、1回しか押してないですよね?
 終わるまで、何回も押してください。
 何処で処理が終了してますでしょうか?
 
 >>その後、エクセル画面に戻り、
 >×で戻っていいんでしょうか?
 「×」で閉じていいのですが、上の操作で問題なくコードが走っている事がわかりましたので
 こちらは関係ないようです。
 【F8】を押しながら、処理を続けてください。
 黄色の行が、どんどん下に行きますよね?
 処理が、1つずつされていることになりますので、何処で終わるかが知りたいです。
 
 上記作業を、J8 と、それ以外でして欲しいです。
 (キリキ)(〃⌒o⌒)b

 すみません。
 再度やってみたところいくつも黄色くなるので書き込みをしていたところです。
 Exit Sub
 ここで黄色終了です。

 上記作業を、J8 と、それ以外でして欲しいです。

 えっと、A1とか入れてやってみればよいでしょうか?
 つまり

 試しにA1でやってみました。
 同じところで黄色がとまります。
 つまり

 If Intersect(Target, Rng) Is Nothing Then Exit Sub
 すみません。追記です。
 この行のExit Subで止まりました。
 つまり


 たびたびすみません。
 今から会議が始まってしまいますので、
 教えていただいている身で申し訳ないのですが、
 お返事が遅くなってしまうかもしれません。
 よろしくお願い致します。
 つまり


 >お返事が遅くなってしまうかもしれません。
 こちらこそスイマセン。。。
 
 色々、忙しくてあまりココにこれていませんでしたTT
 まだ仕事中で、帰宅するのが 23:00 過ぎになると思います。
 こちらこそ、ごめんなさいm(_ _)m
 
 >この行のExit Subで止まりました。
 おかしいですね〜
 J8 以外は、Exit Sub になっていいのですが、
 J8 の場合は、下の命令に行くはずなのですが???
 
 本当に、、、 どうしてでしょう・・・
 (キリキ)(?⌒o⌒)b

 私のエクセルではちゃんと動いてくれてますが・・・・。

 >お教え頂いた通りやってるんですが、J8のセルがうんともすんとも変化なしなんです。
 J8のセルがアクティブになった時点で「15文字以内で、文字を入力してください」
 と言うのが出てくると思いますが、それも出ないのですかね?
 (試しにJ7を選んで↓で下がってみて下さい。)

 > 同じところで黄色がとまります。
 「同じ所」と言うだけではどの記述と同じ所なのかよく分かりません。
 もう一度、一つずつ確認して一つずつ書き込んで下さい。

 >試しにA1でやってみました。
 >If Intersect(Target, Rng) Is Nothing Then Exit Sub
 >この行のExit Subで止まりました。
 J8でやっても、同じ所で止まるのですかね?
 >再度やってみたところいくつも黄色くなるので書き込みをしていたところです。
 >Exit Sub
 >ここで黄色終了です。
 どこのExit Sub の事でしょう?

 ・・・・もしかして、J8は結合されていませんか?

 (HANA)


 お待たせしました^^A;
 >まだ仕事中で、帰宅するのが 23:00 過ぎになると思います。
 こんな事、言っておいて、、、
 たった今、帰って来ました・・・
 (ちょっと、ラーメン屋で一杯ひっかけてきちゃいました♪)
 
 >・・・・もしかして、J8は結合されていませんか?
 それっぽい!!
 さすが、HANAさん!!!
 そういえば、以前アップロードしてくれたファイルは、、、
 H8 のアドレスでしたね〜
 
 (キリキ)(〃⌒o⌒)b AM0:10

 おはようございます。。。
 お疲れのところお返事頂いてすみません。
 ありがとうございます。

 >If Intersect(Target, Rng) Is Nothing Then Exit Sub
 すべてこのコードの最後のExit Subでとまります。

 が、、、

 ・・・j8結合しております。。。
 前に結合はよろしくないよとご指摘頂いた通りになってしまったということでしょうか?
 今から結合を戻して試してみます。
 またご報告いたします。
 つまり

 出来ました!!!
 今は19文字ありまっせ!とメッセージが見事にでました!!

 やはり結合がいけなかったようです。
 作成方法をはじめから勉強しないとダメですね。。。

 長いことお付き合い頂いてありがとうございました。
 また何かありましたらよろしくお願いします。

 つまり

 それは良かったです。

 >作成方法をはじめから勉強しないとダメですね。。。
 私はマクロ出来ないので(コードが書いてあっても読める所しか読めない)、
 実は当てずっぽうでした。
 「結合かも?」と思った理由は
 >J8のセルがアクティブになった時点で「15文字以内で、文字を入力してください」
 >と言うのが出てくると思いますが、それも出ないのですかね?
 これを書いた時に「つまりさんがJ8を選んでいるつもりでも、エクセル君は
 J8が選ばれたと思っていないのかも・・・・」と思った次第です。

 「マクロの記録」ってのをやったことがありますか?
    メニュー・ツール→マクロ→●新しいマクロの記録
 記録すると、自分がやった行動をエクセル君が勝手にコードにして残してくれるので
 コードが分からなくてもマクロが作れてしまう(やったことしか残せませんが)
 と言う機能です。

 新しいブックを立ち上げてやってみて下さい。
 まず「●新しいマクロの記録」を選んで、マクロ名はそのままで[OK]
 B1を選んで「あ」と入力し、Enterを押した後、■記録終了 です。
 今度は、B2:C2を結合した状態で
 「●新しいマクロの記録」を選んで、マクロ名はそのままで[OK]
 B2を選んで「い」と入力し、Enterを押した後、■記録終了 です。

 この作業でどんなコードが出来たのか見てみるのは
 ツール→マクロ→▲マクロ で[編集]を押してみて下さい。
 ActiveCell.FormulaR1C1 = "あ" となっているのが、結合無しセル
 ActiveCell.FormulaR1C1 = "い" となっているのが、結合有りセル
 を選んだときのコードです。
 その上の「Range("○○").Select」まずはここに注目ですよ。

 それから、「じゃあ実際“い”はどのセルに入ってるの?」と言うと
 B2ですよね。でも選択しているセルはB2:C2です。
 例えば
 >Target.Value = ""
 このコードでは、Taeget(B2:C2の).Value(値)=""(が空欄か) の確認になっちゃいます。
 「B2に値があるのかどうか調べたい!!」のだから
     Range("B1").Value = ""  とするか、汎用性を持たせるなら
 (さっき全文検索で入手してやってみたら上手く行った
「Target.Cells(1, 1)」(左上端セルを見る)を使って)
     Target.Cells(1, 1).Value="" としても良いみたいです。

 もう一カ所 Target と書かれた部分がありました。
 >If Target.Count <> 1
 これは、「選ばれた所をカウントして1でなかったら」・・・かな?
 と推測して、今回B2を選ぶと勝手にC2も選ばれて2セル選ぶことになるので
     If Target.Count <> 2  としてやってみると、
 とりあえず、思ったようには動くようになりました。

 こんな感じで
 >分かるところだけ分かる
 と言うスタンスだから、いつまでたってもマクロが作れないのかもしれませんが
 簡単な継ぎ接ぎは出来るようになると思いますよ。

 コードの色んな所をつついてみて、
 色んな事で試してみるのはどうでしょう。

 次はこちらですか?
[[20061003103949]] 『入力制限の応用2』(つまり)
 結合解除が可能なら、oniさんのコードをそのまま貼り付けると
 おじいさんはH7に入力するだけで
 H8に編集可能なフリガナが表示され、もちろん
 R8に入力されている数式も計算され正しい結果を表示してくれますよ。

 (HANA)

 追記:
   セルを結合していても、エクセルの認識通りにコードを書けば
   動くものにはなりますが・・・・大変ですよね。

   やっぱりセルの結合はなるべく使わないのをお勧めしますよ。

 (HANA)

 HANAさん、ありがとうございます。
 印刷して新しいブックで試しにやってみました!
 マクロの記録はやったことはあるのですが、
 そのコードを見たことがなかったので、
 なるほどぉ〜といった感じです。
 こうやって覚えていかないとですねっ
 今、マクロなどの技術よりエクセルで先のような作成をしなければならない時、
 今までは見た目というか先のことを考えず、
 後で色んな大きさに結合できるので楽という理由から、
 セルを細かくしてから作る方法になってしまったのですが、
 まずどうやって作り始めればいいのか?
 そこから出発したいと思います。
 今回のデータもセルをなるべく結合しないで1から作り直しにチャレンジします。
 そこに教えていただいたマクロをつけて動かしてみたいと思います。
 今回の事では本当に勉強になりました!
 またよろしくお願い致します!!
 つまり


 >今までは見た目というか先のことを考えず、
 >後で色んな大きさに結合できるので楽という理由から、
 例えば、計算やマクロなどを使用するシートと、印刷する用紙用のシートを別に作っておき
 計算(マクロ)用のシートは、処理のやり易い並びで作成。
 印刷する用のシートは、見た目重視で作成。
 印刷用シートには、「=計算(マクロ)用のシート!セル番地」みたいにするといいかも^^
 
 (キリキ)(〃⌒o⌒)b 

 今、セルの結合をせずに1から作成して行き詰って来てみました^^
 どうしても表に関数を入れたりするのでそこを結合しないように作ると、
 表以外の欄がガタガタになってバランスが悪くなってしまいます。

 でも、キリキさんの書き込みを読んでなるほどです!
 別々に考えればいいんですね。
 で、きれいな方に数値や文字をイコールで引っ張ってきてあげればいいということですよね???
 ちょっとそれでやってみます!
 ありがとうございますっ!
 つまり


 今、1から作り直しているんですが、
 シートを3つ用意して、
 1枚目→受注物件一覧
 (『チェックしたデータのみ別シートに反映させたい』で教えていただいたものです)
 2枚目→計算用
 (ここに1枚目のチェックしたデータが移るようにしたいです)
 3枚目→印刷用
 (きれいなフォーマットを用意したので、こちらに2枚目のデータを引っ張ってこようと思っています)
 このような構成で作りたいと思っています。

[[20061006163839]]

 ↑こちらでキリキさんがマクロの希望があれば・・・と言ってくださったので、
 甘えたいのですが、、、教えていただいていいでしょうか?

 教えていただくにあたって、どういうことを書いておけばいいでしょうか?

 1枚目 → 2枚目の反映は
   B7   →  Q3
   C7   →  Q5
   D7   →  B3
 という感じなんです(他にもいっぱいあるんですが)

 そもそもマクロを教えていただくのに、何を書いたらいいのかが分からないので、
 そこから教えていただいてもいいでしょうか???

 つまり

[[20061006163839]]『チェックしたデータのみ別シートに反映させたい』(つまり)
 
 こちらでも、HANAさんが仰ってますが、チェックして持ってくるものは1つでしたよね?
 であればマクロを使うまでも無く、数式(VLOOKUP関数など)で十分な気がしますが、、、
 
 何か別の問題でもあるのかな?
 もし問題があるのでしたら、またファイルをアップしてみます?
 
 (キリキ)(〃⌒o⌒)b


 えっと、それは・・・
 「一つの件名なら一つの受注内容でしょ」
  と言うHANA論理より・・・・
 ↑この事ですよね?

 出来ることならば、なんですが・・・
 複数チェックに対応させたいんです。

 ファイルをアップした方がいいですよね。
 私のつたない説明よりはるかにいいと思うので後程アップします。
 よろしくお願い致します。

 つまり

 「続きはあちらで」ですかね?
 マクロをご希望と言う事で、私は参加出来ないのですが
 >教えていただくにあたって、どういうことを書いておけばいいでしょうか?
 と言うことで・・・・。

 >1枚目→受注物件一覧
 これは、あちらでUPしてあるブックのSheet1が該当ですか?
 >3枚目→印刷用
 これは、あちらでUPしてあるブックのSheet3が該当ですか?
|>2枚目→計算用
|>1枚目 → 2枚目の反映は
|>  B7   →  Q3
|>  C7   →  Q5
|>  D7   →  B3
|2枚目は1枚目から抽出した結果のみを表示
|(並びや形式は1枚目と同じ)ではないのですか?

 >>チェックして持ってくるものは1つでしたよね?(Byキリキさん)
 >「一つの件名なら一つの受注内容でしょ」
 >と言うHANA論理より・・・・
 >↑この事ですよね?                           (Byつまりさん)
 この事ではなく
 >「一回に表示するのは一データ(1行)でしょ」
 >と言うHANA論理
 こっちのことかと・・・・。

 >出来ることならば、なんですが・・・
 >複数チェックに対応させたいんです。
 複数チェックして、数値は合計ですか?
 数値以外の所が違うデータが複数チェックされることがありますか?
   その場合、どのデータをどの様に表示しますか?
  
|2枚目に抽出は、あちらでキリキさんが
|>こんな表だとして、、、
|の後に書かれている手順を「マクロの記録」して見てはどうですか?
|(その後例えば、3枚目のシートの1行目等に2枚目のシートを集計して
|  表示したい該当セルに=1行目で集計したセル番地 で引用)
  
|・・・やりたいと思っている事が想像と違うのかな?

 >ファイルをアップした方がいいですよね。
 その場合は、整合性の取れたファイルにして下さいね。
 (前のだと、シートを見ただけではどこに何を入れたいのか
   よく分からなかったので。)
 UPするファイルのシートの上に、テキストボックスとかで
 「どういう理由でここはこの値を入れたい」と注釈があると
 分かりやすいかもしれません。

 (HANA) 

 あれれ?
 結局「2枚目に抽出して何処かで合計して3枚目に表示」なら
 抽出しなくてもSUMIF関数で出来そうですね?

 「印のついたものをダイレクトに(マクロで)計算して2枚目に表示」
 がご希望ですか。
 失礼しました。

 上の文章の内、私の思い違いで書き込みした部分はスルーして下さい。
 (「|」マークを行頭に付けました。)

 (HANA)


 今、こんなデータでこんな風にしたいというのをまとめています。
 (今度こそちゃんとまとめたデータにしますので・・・)
 それによって、マクロがいいのかSUMIFがいいのかVLOOKがいいのか、
 ご意見を頂ければと思っています。。。
 よろしくお願いします。
 つまり

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.