- ベストアンサー
セルを複数選択して移動させたい (Excel2003)
いつもお世話になってます。 エクセルの初歩的な操作方法かもしれませんが教えてください。 いま、電話料金の請求業務をしています。 キャリア(電話会社)からは「4m 10s」のようにでてきますが、 こちらでは分課金なので4m 10s → 5分 または、45s→1分 のように処理します。 そこで、下のような例で困っています。 4m 10s → 5 56s →1 1m 3s →2 8m 59s →9 「(セルの)区切り位置」を利用すると・・・ A B 4m 10s 56s (空欄) 1m 3s 8m 59s ここからB列は何秒であろうが、繰り上げなので1分と判断します。 そしてA列のm(分)と足せば解決なんですが、 A列は「m」と「s」が混在してしまっています。 このような行が5000行近くあるのでひとつひとつ「s」を選択することが実質無理なんです。 A列でオートフィルタ機能を使い、「sを含むセル」を選択して 切り取り→B列に貼り付け をしてもなぜかうまくいきません・・・。 どうすればいいんでしょうか? どうかアドバイスお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
区切りで分けていないデータからmを抜き出し、sがあれば、+1する =IF(ISERR(FIND("m",A1)),0,VALUE(LEFT(A1,FIND("m",A1)-1)))+IF(ISERR(FIND("s",A1)),0,1) 参考 m =IF(ISERR(FIND("m",A1)),0,VALUE(LEFT(A1,FIND("m",A1)-1))) s =IF(ISERR(FIND("m",A1)),VALUE(LEFT(A1,FIND("s",A1)-1)),VALUE(MID(A1,FIND("m",A1)+1,FIND("s",A1)-FIND("m",A1)-1)))
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
#2 です。 十分検証してないしので、ご参考までにですすが。 マクロによる方法です。 A 列に以下の文字列があるとします。 4m 10s 56S 1m 3s 8m 59s このデータの範囲をマウスでセル選択し、下記マクロを実行すると 次のような結果が得られます。 4m 10s 00:04:10 00:05:00 56s 00:00:56 00:01:00 1m 3s 00:01:03 00:02:00 8m 59s 00:08:59 00:09:00 文字列をシリアル値に変換しているだけですが、分課金用に丸めた 時間も同時に計算しています。 Sub Sample() Dim rngC As Range Dim strDat As String Dim datVal As Date For Each rngC In Selection If Not IsEmpty(rngC.Value) Then '余計なSPと全半角の混在による事故防止 strDat = StrConv(CStr(Trim$(rngC.Value)), vbNarrow) '大文字・小文字を区別しないので、TextCompareモードで '「m」があるか判定 If Not InStr(1, rngC, "m", vbTextCompare) > 0 Then '「m」があれば半角SPを補う strDat = " " & strDat End If '半角SPで要素に区切る Buf = Split(strDat, " ") 'シリアル値に変換 datVal = TimeSerial(0, Val(Buf(0)), Val(Buf(1))) '一つ横のセルにそのものの時間を転記 With rngC.Offset(0, 1) .NumberFormatLocal = "hh:mm:ss" .Value = datVal End With '二つ横のセルに丸めた時間を転記 With rngC.Offset(0, 2) .NumberFormatLocal = "hh:mm:ss" .Value = Application.WorksheetFunction _ .Ceiling(datVal, 1 / 24 / 60) End With End If Next rngC End Sub
お礼
マクロまだ理解できず実践できませんでした。 覚えたら戻ってきてやってみたいと思います。 ありがとうございました。
- Buchikun
- ベストアンサー率36% (161/443)
オートフィルタでsだけ抜け出せたなら、それを全部1に書き換えてしまうのはどうでしょうか? フィルタのかかった状態で、セル右下のドラッグ機能で一気に1に書き換えできますよ。 もとのデータを残す必要があるなら、どこかにデータを移さないとまずいですけどね。
お礼
単純ですけどオートフィルタで「~を含む」で簡単にできますね。 実践してみたらうまくできました。ありがとうございます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 [区切り位置]を実行する前に、 =IF(ISERROR(FIND("m",A1,1))," " & A1,A1) みたいにして、Find関数で「m」が含まれるかチェックして、含まれ なければ、半角SPを補う。その後、値に変換して、[区切り位置]実行。 でどうですか?
お礼
オートフィルタのオプション抽出でうまくできなかったことが この関数でできました。ありがとうございます。
- tarame
- ベストアンサー率33% (67/198)
C列に連番を入れておく D列に =right(A1,1) と入力(↓にコピー) D列をキーにして、ソート(並べ替え) D列が「s」のものを移動 C列をキーにして、ソート C列、D列を削除 こんな原始的な方法でいかがでしょうか?
お礼
>回答をくれた皆様へ こんなにたくさんの回答ありがとうございます! まだ仕事がたくさん残っているので実践して ポイント振りたいと思います。スミマセン・・・
補足
補足、ではありませんが rightの関数の使い方を覚えました。 簡単で今後に応用できそうです。ありがとうございました。
お礼
No.1の方に教わったright関数でピックアップし No.3の方の手順で変換することでうまくできましたが、 この関数だと一発ですね(笑 中身がまだ完璧に理解できていませんが こういった複合の関数も使い慣れていきたいと思います。 どうもありがとうございました。