[[20110402105650]] 『セル内での改行(Enterのみ)』(チョウチョ) ページの最後に飛ぶ

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

 

『セル内での改行(Enterのみ)』(チョウチョ)

Windows7
Excel2003

解析者のみなさまいつもアドバイスありがとうございます。

(質問内容)

「セル内編集時の改行をEnterのみで行うためのプログラムを
 
 ワークシートモジュールマクロを使用した方法についてです」

(仕様等)

※会社の報告書のような物を作成しています。
 ワードでやればいいのですが、数式など扱うのでExcelを使用しています。

※本プログラムを適用させる入力箇所は、複数点在した結合セルです。

※その他、標準モジュールやUserFoamを使用しています。

//////////////////////////////////////////////////////////

現在の状況

/////////////////////////////////////////////////////////

通常のセル内での改行は「Alt+Enter」で出来ます。

現在は、UserFoamに設置したTextBoxを使用して

 TextBoxのプロパ設定で「Enterで改行」

 TextBox1_Changeで  「セルと同期」

する形を取っています。

しかし、入力する結合セル(20カ所あり)をクリックするたびに入力用フォーム
が表示されるように仕掛けをしているため、結構、うるさく感じます。

そこで、入力用フォームを廃止して 直接 結合セルへ入力できるようにしたいと
考えました。

入力内容は長文になりますので、改行はEnterのみで行えるようにしたいです。

すみません、忙しいと思いますが、どなたかアドバイスをよろしくお願いします。


 >クリックするたびに入力用フォームが表示されるように仕掛けをしているため、結構、うるさく感じます。
 これをアクティブセルと同じ大きさのテキストボックス(ActiveXControl)を
 配置して入力させてみては?

 対象セルが選択されたら、
 予め作成しておいた(通常は、非表示にしておく)Textbox1を表示状態にし、対象セルに配置し、
 別のセルがクリックされたら、Textboxの内容をセルに書き込み、
 Textboxは、非表示にする方法

 検討してみてください。

 ichinose@脱字訂正


 ichinose 様

早速のご回答ありがとうございます。

提案の件を試してみました。

何せワークシートにコントロールを配置するのは初体験です。

下記のコードは、テスト用のシートを用意して試したものです。

とりあえず

・指定したセル選択時にTextBoxを表示・それ以外は非表示

・TextBox1へ「入力」と「結合セルへの表示

はできるようになりました。

ただ、分からないのは、結合セルを選択した場合は、動作しません。

結合セル範囲:B3:E8

' セル選択によるイベント

  Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

    'B3セルを選択したときだけ
  '※複数セル選択では反応なし
    If Target.Row = 2 And Target.Column = 2 Then
      TextBox1.Visible = True  '表示
    Else                       'それ以外のCell選択時は
      TextBox1.Visible = False '非表示
    End If
  End Sub

Private Sub TextBox1_Change()

With Me.TextBox1

      .MultiLine = True            'Enterキーだけで改行設定1
      .EnterKeyBehavior = True     'Enterキーだけで改行設定2
      .Enabled = True              ' テキストを入力可能
      .MaxLength = 50              '***文字まで入力可能
      .IMEMode = fmIMEModeHiragana 'ひらがな
End With

Range("B3") = TextBox1.Value 'B3:E8の結合セル

End Sub

よろしくお願いします。


これで、結合セル選択時に処理できるようになりましたが

なんとなく挙動がおかしいような感じです。

PCの性能は問題ないとおもうのですが、セル選択時にtextbox選択時の反応がにぶいような・・

なにか間違っているかもしれませんのでアドバイスよろしくお願いします。

' セル選択によるイベント

  Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim myRange As Range
Set myRange = Range("B3:E8")

'指定範囲以外の選択時は

If myRange.Address <> Union(Target, myRange).Address Then

      TextBox1.Visible = False '非表示
    Else                       '指定範囲選択時は
      TextBox1.Visible = True  '表示
    End If
  End Sub

(チョウチョ)


 イメージがよく分からないのですが
 入力するためのセルの選択を、マウスで行い
 入力後、マウスで別の場所を選択するのなら
 普通のテキストボックスでは駄目なのでしょうか?

 結合セルと同じ大きさのテキストボックスを作り
 テキストボックスの書式設定の [保護] タブで
 ロック(L)にチェック、文字列のロック(T)のチェックを外して
 シートの保護をすれば、間違って動く事も無くなると思いますが。

 。。。そこに有る様に見えるだけじゃだめなのかな?

 (HANA)

HANA さま

ごもっともな意見ありがとうございます。

最初そのようにしていましたが、

「入力後に印刷すると文字がはみ出てる(文字数の設定ができるのか?)」
「入力後にそのテキストボックスの内容をマクロで取り出してデータベースへ追加可能か?」

以上の2点について無理かな〜といった感覚で質問の内容にたどり着きました。

もし、可能であれば、HANA さまの方法で再度、作り直してみたいと思います。


 あ、文字数の設定は出来ないですね。
 ただ
 >.MaxLength = 50 
 を設定しても、改行が多いと 下の方ははみ出す可能性が有ると思いますが。。。

 セルに書き出したら、「縮小して全体を表示」が出来るからそこまで気にしなくて良い
 って事かな。。。?

 >入力後にそのテキストボックスの内容をマクロで取り出してデータベースへ追加可能か?
 これは、このあたりとか。
[[20110205233528]] 『結合セルの上のテキストボックスの内容をセルに移行』(お願いです)

 (HANA)

 新規ブックにて、試してみてください。

 標準モジュールに

 '====================================================================
 Sub 初期設定()
    With ActiveSheet.OLEObjects.add(ClassType:="Forms.TextBox.1", Link:=False, _
        DisplayAsIcon:=False, Left:=207.75, Top:=163.5, Width:=159.75, Height _
        :=45.75)
        .Visible = False
        .Object.MultiLine = True            'Enterキーだけで改行設定1
        .Object.EnterKeyBehavior = True     'Enterキーだけで改行設定2
        .Object.Enabled = True              ' テキストを入力可能
        .Object.MaxLength = 50              '***文字まで入力可能
        .Object.IMEMode = 4 'ひらがな
        .Name = "textbox1"
    End With
    Range("B2:E8").Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
 End Sub

 まず、上記の初期設定をSheet1をアクティブにして実行してください。
 B2:E8が結合セルで折り返して表示に設定してあります。

 上記の状態に設定した上で

 Sheet1のモジュールに

 '====================================================================
 Option Explicit
 Const add = "b2:e8"
 Private Sub TextBox1_LostFocus()
    Range(add).Value = Replace(TextBox1.Value, vbCrLf, vbLf)
    TextBox1.Visible = False

 End Sub
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim ttarget As Range
    Set ttarget = Application.Intersect(ActiveCell.MergeArea, Range(add))
    If Not ttarget Is Nothing Then
       With TextBox1
          .Value = ActiveCell.Value
          .Left = ttarget.Left
          .Top = ttarget.Top
          .Width = ttarget.Width
          .Height = ttarget.Height
          .Visible = True
          .Activate
       End With
    End If
 End Sub

 これで B2:E8をアクティブにして、試してみてください。
 これ、テキストボックスで置き換えるセルが複数箇所
 あるなら、工夫が必要ですね!!

 ichinose@訂正


コメント返信:

[ 一覧(最新更新順) ]


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