• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6のMSFlexGridでセルをマージしたい)

VB6のMSFlexGridでセルをマージする方法 | マージがうまくいかない原因とは?

このQ&Aのポイント
  • VB6のMSFlexGridでセルをマージしたいがうまくいかない。セルをマージして結合したい場合、MergeCellsプロパティやMergeRowメソッドを使用するが、マージがうまくいかない原因は順番の記述にある可能性がある。
  • セルをマージする手順として、先頭セルに値を設定し、次の行の先頭セルに同じ値を設定する。その後、マージ処理を行う。しかし、記述順番が正しくないとマージがうまくいかないことがある。
  • VB6のMSFlexGridでセルをマージするには、セルの値を設定する前に、マージの設定を行う必要がある。具体的には、MergeCellsプロパティを使用してマージの方式(MergeFreeやMergeRow、MergeCellsでの指定)を設定し、正しい順番でセルの値を設定する。これにより、セルのマージが正しく動作する。

質問者が選んだベストアンサー

  • ベストアンサー
  • uruz
  • ベストアンサー率49% (417/840)
回答No.2

列をマージするのだからMergeRow()ではなくMergeCol()ですね。 No1さんも書かれていますが、マージは隣接するセルの内容が同じならくっつけちゃうので 1行目~4行目、5行目~8行目までの4行がマージの対象になります。 回避策は空白行を挿入します、今回の場合は2行毎です。 With oObjGrid .Rows = 1 .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .AddItem "AA" & vbTab & "1" & vbTab & "2" & vbTab & "3" .AddItem "AA" & vbTab & "A" & vbTab & "B" & vbTab & "C" .AddItem "" '空白行を挿入 .RowHeight(.Rows - 1) = 0 '空白行の高さを0に(非表示) .AddItem "AA" & vbTab & "4" & vbTab & "5" & vbTab & "6" .AddItem "AA" & vbTab & "D" & vbTab & "E" & vbTab & "F" .AddItem "" '*** .RowHeight(.Rows - 1) = 0 '*** .AddItem "BB" & vbTab & "1" & vbTab & "2" & vbTab & "3" .AddItem "BB" & vbTab & "A" & vbTab & "B" & vbTab & "C" .AddItem "" .RowHeight(.Rows - 1) = 0 .AddItem "BB" & vbTab & "4" & vbTab & "5" & vbTab & "6" .AddItem "BB" & vbTab & "D" & vbTab & "E" & vbTab & "F" .AddItem "" '*** .RowHeight(.Rows - 1) = 0 '*** End With '***の行は無くてもかまいませんが、セルの位置を計算する場合に規則性がないと困りますからね。

usami33
質問者

お礼

回答ありがとうございました かなり勘違いしていたようで てっきり.Colで指定した列の MergeRow番目がマージされるのだと思っていました。 おかげさまですっきりした状態で、解決する事が出来ました。 追伸 空白行ではなく、文字の後ろにスペースを追加で、余計なマージも回避できました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

どううまくいかないのか、 ' ※ここでマージ処理を試したつもり ↑どういう意味なのか不明です。処理?何の? コードが無いなら処理とは言わないですが。 マージの仕様が同じデータが連続してたらセルを くっつけちゃう設定だから、"AA"が連続してたら 全部くっつくという話?そういう仕様だったと 思いますが?ヘルプとかは読んだんですか? 順番???プロパティに最後に設定した値しか 有効じゃないでしょう??? 非表示の空白行を2行ごとにはさんでおくとか 工夫した事はありますね。。。インデックス指定は 通常通り指定しても空白行を計算して該当のセル から値をとってくる関数を自作して。 もはやVB6の開発環境が残ってないですが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MSFlexGrid

    VB6SP6を用いています。MSFlexGridですが、固定行をラベルに用いています。このグリッドをクリックして処理を行っています。固定行では、クリックを無視してほしいのです。固定行をクリックしても、grid.Rowの値は0ではなく、押してもいない、1が返ってきます。本来はクリックしたくない場所ですが、処理を行う1行目をクリックしたことと同じになってしまいます。 ラベル部分をクリックしないようにと伝えていますが、やはり具合が悪いです。 良い、回避方法はないでしょうか。

  • MSFlexGridで↑や↓押下時の処理

    現在VBの勉強をしております(WindowsXp、VB6.0) MSFlexGridの行を選択すると、行のデータをテキストボックスへ表示する、といった処理を実装したんですが、キーボードの「↑」や「↓」押下時に、選択行は変わるんですが、クリックイベントでもフォーカスイベントでも処理を拾えません・・・。 まだ試してはいないんですが、keyDownイベントで、「↑」「↓」を判断し、更にグリッドにフォーカスが存在する場合に、1行上(または下)のデータをテキストボックスに表示する。 という処理をしないと不可能でしょうか? どう考えても上記の方法はスマートでは無いなぁと思い、何か良い方法があれば教えていただきたく質問させていただきました。 よろしくお願いいたしますm(__)m

  • VBのスプレッドシートについて

    VBのフォーム上にスプレッドシートをとりこみ、 ボタンをクリックすると、アクティブになっている 行を削除したいです。 スプレッドシートではデザイナで、事前に単一選択を選んでおき、1行単位でアクティブになるように設定しています。 スプレッドシートのヘルプを参考に、 Private Sub Command1_Click() With vaSpread1 .Row = ActiveRow .BlockMode = False .Action = SS_ACTION_DELETE_ROW .BlockMode = True End With End Sub このように記述したのですが、 うまくいきません。 処理は通るだけで、行の削除がされません。 何が原因なのでしょうか?お願いします。

  • VBAでセルを結合

    いつもお世話になっております。 VBAで「B列に●●が入力されたら、B列から10列はなれたセルから3つ分を結合して、そのセルに××と入力する」という処理を行います。 まだ途中なんですが、こんな感じで考えています。 If B.Value = "火" Then   Range(offset0, 10),Resize(1, 3)).MergeCells = True   'ここからの処理は未定  End If マージした後にさらに値を入れるので、variantかなんかで変数を用意して、その中に入れたほうがいいかな?と考えていますが、どうでしょうか?

  • ファイル中の特定文字列を繰り返す処理

    文字列操作についてご教示いただけますでしょうか。 特定文字列(FFF)を基準にして、次のFFFが現れるまでの行にFFFの行にある文字列を先頭に挿入したいと考えています。 エクセルだと簡単にできるのですが、行数が多いためperlで処理をしようと考えています。 以下のようなテキストを FFF あああ text1 text2 text3 ... FFF えええ text6 text7 text8 ... 以下のようにしたいと考えています。 FFF あああ あああ text1 あああ text2 あああ text3 あああ ... FFF えええ えええ text6 えええ text7 えええ text8 えええ ... どのような処理にするとよいでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • セル結合と列挿入

    マクロの記録を使い書いて見ましたが、1行置きに3行挿入し 、A2:A5 , B2:B5 ,C2:C5 ,D2,D5 言う感じでセル結合を5000行まで行い、最後にD、E列、列の挿入したいのですが、どのように書けば宜しいでしょうか? すでに、データが入っています。 Sub Macro1() Rows("3:5").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Rows("7:9").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A2:A5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("B2:B5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("C2:C5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("A6:A9").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("B6:B9").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("C6:C9").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Columns("D:E").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Selection.ColumnWidth = 18.88 Range("A2:A5").Select End Sub

  • MSFlexGrid 行選択状態

    現在VBを勉強しております。(WindowsXP、VB6.0) http://oshiete1.goo.ne.jp/qa996239.html ↑の質問と同じ内容で悩んでいるんですが、回答を見ても理解出来ず、解決出来ていません(>_<) 1.処理起動時に、テキストファイルからデータを読み込み、グリッドへ表示した後。 2.ソートした後。 3.「検索」処理にてデータを絞り込んで表示した後。 以上3点の時に、行選択状態でなくなってしまうので、それを修正したいんですが、方法が分かりません(;_:) 現在は、グリッドのフォーカスイベントに MSFlexGrid1.SelectionMode = flexSelectionByRow を設定しているだけです。 以上、よろしくお願いいたしますm(__)m

  • エクセルのマクロで行選択の選択範囲を変数指定する方法

    あるファイルのデータを別のファイルに行挿入でコピーするマクロを作ろうとしています。 コピー元の選択について、行範囲が固定であれば例えば   Rows("10:20").Select でよいのですが、コピー元行範囲がファイルにより異なるので変数化する必要があります。 単純には、 Sub Row_Copy() Dim AA, BB As Integer AA = 10 BB = 20 ' 10行目から20行目を行選択しコピーする Rows("AA:BB").Select '##ここが問題## Selection.Copy ' ' (簡単のため)同じシートに行挿入する例 Rows("30:30").Select Selection.Insert Shift:=xlDown End Sub ですが、これだと Rows("AA:BB").Select の部分でエラーになります。 いろいろとやってみましたが、どうしても何らかのエラーになってしまいます。Rowsは変数では使用できないのでしょうか? ちなみに、行範囲の選択ではなくRangeでセル範囲の選択をするという方法もありますが、複数ファイルのデータをコピー先の一つのファイルにマージするために行挿入でコピーしたいことと、列方向の柔軟性を持たせたいため、コピー元選択方法として行範囲の指定をしたいという趣旨があります。 また、1行毎のコピー・行挿入をデータの行数だけ繰り返すという手もありますが、データ量が多いとかなり処理時間がかかるためこれも避けたいと思っています。 マクロ初心者で知識不十分ですが、よろしくお願いします。

  • エクセル2010のマクロについて、セル結合の解除

    全てのセルを選択して、結合されているセルがあったら全て解除したいのですが、 マクロの記録で作成すると、↓を何百回も繰り返すソースになってしまいます With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With 長すぎるとエラーになってしまいますし、何回繰り返すかもランダムなので、↑の処理を、 結合されたセルがなくなるまで繰り返すという設定にしたいのですが、可能でしょうか? よろしくおねがいします。

  • VB6 TextBoxの先頭が自動改行されてしまう

    中を見ていただき、ありがとうございます。 Visual Basic 6.0 をWinXP SP3で使って、メモを作っています。 機能としては非常に単純で、書き込み用のテキストボックス(以下Text1とします)と記録用のテキストボックス(つまりLocked=Trueとして書き込めないようにしている:以下Text2とします)があって、(1)Text1にメモを書いてEnterを押せば、(2)その内容がText2に転写され、(3)Text1の内容は消える、というものです。 ところが、以下のプログラムによってこれを実装しようとしたところ、Text1からText2への転写はうまくいくものの、2回目以降はText1の1行目が自動的に改行された状態になってしまい、必ず2行目から文章を打たなくてはいけないようになってしまいます。 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Text2.Text = Text2.Text & vbclrf & Text1.Text Text1.Text = "" End If End Sub 使用する上では特に問題無いのですが、見た目が少し悪いので、この1行目の「自動改行」をキャンセルする方法をご存知の方がいらっしゃいましたら、ご教授くださいますようお願い致します。