プロが教える店舗&オフィスのセキュリティ対策術

下記に添付した画像の左の図のように、
2つの列を設け、A列は番号で、B列は、文字又は画像を挿入します。
そして、それらをデータの並び替えで、番号を基準と昇順に並び変えた時に、
画像の右の図のように、画像が入っている番号4の行のセルの、高さがキープされず、
一方で、番号10の行のセルの高さが、そのままになってしまいます。
データを並び変えた後も、セルの高さを維持するにはどのように設定すればよいのでしょうか?
よろしくお願いします。

尚、画像については、画像上で右クリックで、サイズとプロパティより、「◎セルに合わせて移動やサイズを変更する」に設定してあります。

「エクセル 画像入りのセルの並び替えについ」の質問画像

A 回答 (4件)

ああ、無理。


一つずつ手作業で修正するしかないよ。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2021/10/10 20:18

エクセルが並び替えの対象としてるのは「値」レイアだけ。


罫線とか式とか、他のレイヤは元のままです。
そういうスペックだから仕方有りません。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2021/10/10 20:18

いままでの回答者さんが述べておられるとおり、画像を貼り付けた場合、順番を入れ替えるとセルの高さを自動的に調整するのは困難なようです。


No.1さんが、
>一つずつ手作業で修正するしかないよ。
とおっしゃっていますが、そこまで手間をかけずとも、2ステップで高さを調整する方法はあります。
まず、画像を貼り付けるセルに「ALT+ENTER」を複数回入力し、画像がフルサイズで表示される高さを確保します。
その状態で画像を貼り付けます。当然、「◎セルに合わせて移動やサイズを変更する」は設定しておくものとします。
添付画像(ア)をご覧ください。番号がばらばらで11行目に「番号4と画像」が表示されています。これを番号順に並べ替えしたものが添付画像(イ)です。画像のあるセルが5行目に表示されていますが、高さが調整できていません。また、もともと画像のあった11行目の高さも画像があったときの高さのままです。
これを以下の2ステップで高さ調整します。
(1)添付画像(ウ)の①つまり、行番号と列名の交差する左隅の位置をクリックするとシート全体が選択された状態になります。
(2)上記の状態で、マウスカーソルを添付画像(ウ)の➁つまり、一行目と二行目の間でマウスカーソルが上下の矢印に変わる位置にもっていき、ダブルクリックします。
上記の2ステップで添付画像(エ)のように、今画像のあるセルの高さと前に画像があったセルの高さが同時に調整されます。
「エクセル 画像入りのセルの並び替えについ」の回答画像3
    • good
    • 1
この回答へのお礼

ありがとうございます。このような機能があったとは知りませんでした。感謝いたします。

お礼日時:2021/10/10 20:18

こんにちは


既に回答にある通り、組み込みの機能、メソッドでは出来ないですね。

もし、そのような処理を行いたい場合は、VBAを使う必要があります。
勿論、手作業で行う方法もありますが、画像のサイズより大きいセルの高さで設定されている場合は、1行ごと設定する必要が出てきて、行数によっては、、やってられません。(私の場合は)

この様なことがきっかけでVBAを覚える方もいらっしゃるかと思いますが
VBAを作成、使うには、ある程度の知識が必要になるのと(これは関数やメソッドでも同じかな)問題点があります。

最大の問題点は、VBAマクロで実行処理された内容を戻るボタン、Ctrl+Zキーなどで戻せないと言う事だと思います。

ご質問の内容(例)をVBAで行う場合
処理の内容
①選択範囲(見出し行を含まない)の一番左列をキーに昇順または降順で並び替えます。
②セル内に配置された画像も移動します(要:画像設定「◎セルに合わせて移動やサイズを変更する」
③並び替えに行の高さも適用

導入方法
対象ブックを開き
①Alt+F11キーを押します。(VBE(エディター)が表示されます)
②Altを放さず Iキーを押し
③Altを放さず Mキーを押します。
(Altキーを放した場合は、Altキー+Iキー Altキー+Mキー)
④カーソルが表示されている部分に下記をコピペ

’この下からーーー
Sub 範囲並び替え()
Dim i As Long, n As Long, rCount As Long
Dim Ary1(), rng As Range
Set rng = Selection
rCount = rng.Rows.Count
If rCount <= 1 Then MsgBox ("対象範囲を選択してください"): Exit Sub
ReDim Ary1(1 To rCount, 2)
For i = 1 To rCount
Ary1(i, 1) = rng(i, 1).Value 'keyPos
Ary1(i, 2) = rng(i, 1).RowHeight
Next
Call quick_sort(Ary1, LBound(Ary1), UBound(Ary1), 1)
Dim retMsg
Dim lngSt As Long, lngEnd As Long, intStp As Integer, Ky As Integer
retMsg = MsgBox(Prompt:="並び替え処理を実行しますか?" & vbCrLf & vbCrLf & _
"昇順処理は 「はい」ボタンを" & vbCrLf & _
"降順処理は 「いいえ」ボタンを" & vbCrLf & _
"中止する場合は「キャンセル」ボタンを押してください", _
Buttons:=vbYesNoCancel, Title:=" 処 理 選 択 ")
If retMsg = 6 Then
lngSt = 1: lngEnd = rCount: intStp = 1: Ky = 1
ElseIf retMsg = 7 Then
lngSt = rCount: lngEnd = 1: intStp = -1: Ky = 2
Else
MsgBox "中止しました": Exit Sub
End If
rng.Sort Key1:=Cells(1, 1), Order1:=Ky, Header:=xlNo
n = 1
For i = lngSt To lngEnd Step intStp
rng.Rows(i).RowHeight = Ary1(n, 2)
n = n + 1
Next
End Sub
Sub quick_sort(ByRef argAry() As Variant, _
ByVal lngMin As Long, _
ByVal lngMax As Long, _
ByVal keyPos As Long)
Dim i As Long, j As Long, n As Long
Dim vBase, vSwap
vBase = argAry(Int((lngMin + lngMax) / 2), keyPos)
i = lngMin
j = lngMax
Do
Do While argAry(i, keyPos) < vBase
i = i + 1
Loop
Do While argAry(j, keyPos) > vBase
j = j - 1
Loop
If i >= j Then Exit Do
For n = LBound(argAry, 2) To UBound(argAry, 2)
vSwap = argAry(i, n)
argAry(i, n) = argAry(j, n)
argAry(j, n) = vSwap
Next
i = i + 1
j = j - 1
Loop
If (lngMin < i - 1) Then
Call quick_sort(argAry, lngMin, i - 1, keyPos)
End If
If (lngMax > j + 1) Then
Call quick_sort(argAry, j + 1, lngMax, keyPos)
End If
End Sub
’この上までーーー
*ブックの保存は、マクロ有効ブックで

使い方
① 並び替えを行いたい範囲を選択します。(見出し行を含めない)
② Altキー + F8キーを押します
③ 表示されたUIの 範囲並び替え を実行します。
(選択してダブルクリックでも実行できます)

上記サンプルのデバックは完全ではありません。
テストする場合は、自己責任でコピーファイルなどを使い
十分なテストを行ってください。

参考: 鵜原パソコンソフト研究所 2次元配列の並べ替え
https://excel-ubara.com/excelvba5/EXCELVBA229.html
    • good
    • 1
この回答へのお礼

ありがとうございます。このような時に、マクロのコードが書ける人に憧れます。貼り付けて実行してみたら、おっしゃるとおり、幅を変えずに移動することができました。とても便利です。変更しなければならない場所がとても多かっただけに、とてもありがたい機能です。感謝いたします。

お礼日時:2021/10/10 20:20

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