VBAで指定行を上下へ移動するコード
指定範囲の行を上の行へ、下の行へ移動したいときは多いですよね。 そういう処理です!
例えばこんなことができる!
・上矢印ボタンを押すと、選択しているセルがある行の、A-Dの列を1行上へ移動する。
このコードのいいところ
・Excelの切り取り・貼り付け機能を使っているので数式内の参照も自動でずれる! ・書式は移動しない!
注意点
・SwapSheetという名前でシートを作っておく。 ・シート名を右クリック「非表示」とすることで邪魔にならない。
'=====================================
' 上の行と入れ替えるサンプル
'=====================================
Public Sub SwapRowUp()
' セルが選択されていることを確認
If TypeName(Selection) <> "Range" Then
MsgBox "セルを選択してから実行してください。", vbExclamation
Exit Sub
End If
SwapRowByOffset Selection, -1, "A", "Z"
End Sub
'=====================================
' 下の行と入れ替えるサンプル
'=====================================
Public Sub SwapRowDown()
If TypeName(Selection) <> "Range" Then
MsgBox "セルを選択してから実行してください。", vbExclamation
Exit Sub
End If
SwapRowByOffset Selection, 1, "A", "Z"
End Sub
'=====================================
' Sub SwapRowByOffset
'
' 機能:
' baseCell の行と
' そのオフセット行(row + offsetRow)の
' startCol~endCol 列のセルを切り取り移動し、
' Excel のセル参照自動調整(相対/絶対参照、$マーク固定)を再現します。
'
' 引数:
' baseCell As Range
' 処理対象のセル。行単位で操作を行います。
' offsetRow As Long
' -1 → baseCell の行と上の行を入れ替え
' +1 → baseCell の行と下の行を入れ替え
' startCol As String
' 開始列(例:"A")
' endCol As String
' 終了列(例:"Z")
'
' 前提:
' - プロジェクト内に「SwapSheet」という名前のシートを
' あらかじめ作成しておくこと。
' - SwapSheet の 1 行目を一時バッファとして使用します。
'
' 注意:
' - .Cut メソッドを使用するため、セル書式やコメントも移動します。
' - 画面更新を一時的に停止します。
'=====================================
Public Sub SwapRowByOffset(ByVal baseCell As Range, _
ByVal offsetRow As Long, _
ByVal startCol As String, _
ByVal endCol As String)
Dim ws As Worksheet
Dim wb As Workbook
Dim tmpWS As Worksheet
Dim currentRow As Long
Dim targetRow As Long
Dim firstColNum As Long
Dim lastColNum As Long
Dim colCount As Long
Dim rngCurr As Range
Dim rngTarget As Range
Dim rngTemp As Range
' 1) baseCell のワークシート取得
Set ws = baseCell.Worksheet
Set wb = ws.Parent
' 2) 一時シート取得
On Error Resume Next
Set tmpWS = wb.Worksheets("SwapSheet")
On Error GoTo 0
If tmpWS Is Nothing Then
MsgBox "エラー: SwapSheet シートが見つかりません。", vbExclamation
Exit Sub
End If
' 3) 行番号計算
currentRow = baseCell.Row
targetRow = currentRow + offsetRow
' 範囲外チェック
If targetRow < 1 Or targetRow > ws.Rows.Count Then
MsgBox "入れ替え対象の行が存在しません。 (" & currentRow & " → " & targetRow & ")", vbExclamation
Exit Sub
End If
' 4) 列番号取得
firstColNum = ws.Range(startCol & "1").Column
lastColNum = ws.Range(endCol & "1").Column
colCount = lastColNum - firstColNum + 1
' 5) 対象範囲およびバッファ範囲設定
' 6) 切り取り移動(Excel のセル参照自動調整を利用)
' 画面更新を停止して行う。
' 対象行範囲を都度、再取得する(Cut によりオブジェクトが無効化されるため)
Application.ScreenUpdating = False
' (1) 現在行 → 一時バッファ
Set rngCurr = ws.Range(ws.Cells(currentRow, firstColNum), ws.Cells(currentRow, firstColNum + colCount - 1))
Set rngTemp = tmpWS.Cells(1, 1).Resize(1, colCount)
rngCurr.Cut Destination:=rngTemp
' (2) 対象行 → 現在行
Set rngTarget = ws.Range(ws.Cells(targetRow, firstColNum), ws.Cells(targetRow, firstColNum + colCount - 1))
Set rngCurr = ws.Range(ws.Cells(currentRow, firstColNum), ws.Cells(currentRow, firstColNum + colCount - 1))
rngTarget.Cut Destination:=rngCurr
' (3) 一時バッファ → 対象行
Set rngTarget = ws.Range(ws.Cells(targetRow, firstColNum), ws.Cells(targetRow, firstColNum + colCount - 1))
Set rngTemp = tmpWS.Cells(1, 1).Resize(1, colCount)
rngTemp.Cut Destination:=rngTarget
Application.ScreenUpdating = True
End Sub
替え刃の新旧を見分けやすくする方法
ルーターやトリマーの替え刃は、裏表で2枚使えるようになっています。 これを交換する時に、迷いますよね。 「この裏側は使用済みか??」
この迷いを無くす方法の1つが、 「マジックで色をつけておく」です。
新品の替え刃の全てのしのぎ面に、マジックで色をつけます。 あれ、裏につけておいた方がいいかも?

どちらでも同じ効果が起こります。
カンナ屑を拾いやすいちりとりはこれ!
私は掃除道具もよく比較検証しているのですが、 カンナ屑をひろうの、大変ですよね。
その中からちりとりを3つおすすめさせてください。
- 工場用
- 持ち運び用
- 特別編
工場用にはこれ!
これの特徴は、
- 自立している
- 口の幅が広くてゴミが入りやすい
- ふところの「つつみ」に高さがあり、カンナ屑などもこぼれない!
持ち手もいい感じ。最高に使いやすいのでこれ以外は捨てて入れ替えました(笑
持ち運び用にはこれ!
特徴
- 左右の立ち上がりがはじめから高い
- 左右の立ち上がりが平均のものより高い
- 太い柄の箒でも挟み込める
こちらもお気に入り。ほか製品はカンナ屑がこぼれてしかたない。
特別編!特大ちりとり!
自立するので、置いてゴミ箱にしておくことができます。 で、近くまで箒で掃いてきたら、これを横にしてちりとり的にゴミを入れられます。 これは革命!
みなさんのこだわり掃除道具も気になります。 ぜひお教えください!
jw_cadで図形が表示されないときの対処法
jw_cadで円弧を使っていると、描いてあるはずの図形が表示されなくなることがありました。

下記のブログに解決法が紹介されていました。 あるはずの線が表示されない、選択色が元に戻らない:some about Jw_cad:SSブログ
おかげさまで解決しました。ばっちりVer.8を使っています。 Direct2Dによる描画をやめると、問題がなくなるようでした。
現在の鉋の研ぎ方まとめ201905
先日初めて削ろう会の全国大会(奈良県伊那市)を見学して、 やっと初めて天然砥石を買いました。 これが最後に加わりました。
使用する砥石
- キング#800
- 刃の黒幕#1000
- 刃の黒幕#5000
- 刃の黒幕#8000
- 天然砥石(大谷山)
研ぎ方
以前までと変わらず。 →現在の鉋の研ぎ方まとめ201809 ただ、前処理として裏を#5000→#8000として、よりは先を正しく治せるように意識し始めました。 手間が増えてしまいましたが、ちゃんとバリが取れる分、よく切れるようになりました。
さらに、最後に裏表ともに天然砥石で傷がなくなるまで落とします。 傷がなくなったことで、薄い鉋屑もつながって出るようになって感動しています。 これが刃の持ちにも影響している気がしますが、それが発揮するのはもっと場数をこなしてからでしょう。
今後の改善案
できればやわらかい天然砥石もほしいです。 刃の耳を落としたような研ぎ方をするときには、やはりそのほうがいいでしょう。
今回の天然砥石はかなり固いほうのものにしています。 理由は、粒度が高いものがうれしかったからです。 黒幕#12000でも、1度こするだけで刃返りが出ている気がしていましたが、これではないように感じたからです。
これも固いので、もしかすると黒幕8000の代わりに、刃の裏は最初からすべてこれでもいいかもしれません。
謝意
天然砥石について、砥取屋さんにこまかく教わりながら買うことができました。 本当にありがとうございました!
おまけ
研ぎをすると手や爪の間が汚れますよね。実はこれを見つけてから、かなりきれいに掃除できてます。おすすめです。
www.amazon.co.jp
ほかにご存じの商品があれば、ぜひ教えてください!
現在の鉋の研ぎ方まとめ201809
日々研ぎ方が変わっています。 私が重視しているのは、 * 研ぎつけの速さ * 再研磨も楽にする * 平らに研ぐ。再研磨も早く、硬い砥石に乗りやすい。 * 砥石が無駄に減ることを避ける。
使用する砥石
- キング#800
- 刃の黒幕#1000
- 刃の黒幕#5000
- 刃の黒幕#8000
研ぎ方
裏をきれいにする 刃の黒幕8000で裏をきれいにします。 最近知ったのですが、裏の刃先が白く筋になっているのは摩耗なのかもしれません。 これが残っているとバリが取り切れないので、無くす必要があります。ただ、しのぎ面を研ぎ減らすべきか裏を押すべきか、悩むところです。みなさんはどう選んでいるのでしょうか。。。
キング#800 これは2日前から再び使い始めました。 理由は研ぎ減るのが速いからです。黒幕が遅く感じます。 刃が丸くなりやすいので、最後は押し研ぎを3回くらい。
刃の黒幕#8000で裏 バリを取っておきます。
刃の黒幕#1000 キングではどうしても丸さがでます。それをここで平らにします。 (#800から#5000に飛ばす方もいました。) ここで平らになっていれば、以降の硬い砥石でもは先にすぐ当たるため、早く研ぎ付くと思います。
刃の黒幕#8000で裏 バリを取っておきます。
刃の黒幕#5000 粒度を上げていきます。ここからは研ぐのではなく「磨く」イメージです。 一瞬で終わります。 ここではバリを取っていません。
刃の黒幕#8000 仕上げとしています。
刃の黒幕#8000で裏
嵐山#8000で仕上げ
これはまだ確定ではないです。 最後に嵐山で両面最後に磨いたりしています。 理由は、2つ。
- 刃の黒幕よりも傷が少なく見える
- 柔らかいため、若干の凹凸で当たりきらなかった刃を研いでくれる ということを期待しています。
セラミックは粒度を上げても深い傷が入ると言われていて、 私も実際そんな見た目だなと納得しています。
また、いつでも真っ平らに砥石を直していては、砥石直しにばかり時間をとられそうです。 だから多少鉋がきっちりしていなくても、柔らかい砥石が刃物の方に合わせてくれるのを期待したいです。
現在はこのような砥ぎ方です。
天然砥石も試してみたいけど、はずれが混ざっているものに大金をだす余裕もないので。。。 今後も時間・お金・切れ味のバランス良く遂げる方法を模索していきます。
ピンネイルは木目に流される
今日気づいたことの1つ。
ピンネイルは木目に流されることがあるってこと。

自分の道具を作っている時でよかった。 1割くらいの確率で流されていました。 材料が木目の硬い米松だったことも要因の1つだと思います。
対策は、木口を見て目の流れる方向を確認して、流れと逆向きに、はみ出ない程度に傾けること。その後は上手くいきました。
建具製作ではめったに使わない道具だけど、 今後の工作では注意していきます。


