ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1422|回复: 21

[求助] 填入中间空白的位置该采用那种方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-8 14:18 | 显示全部楼层 |阅读模式
本帖最后由 wuaijie 于 2023-4-9 11:40 编辑

如案例所示,
在“”出库单“”中数据是不连续的,想把“采购单”中的内容写到“出库单”里,合成一个出入库的流水,该怎么写呢?
用usedrange不行,用currentregion也不行,该如何解决呢
要求:
1、将采购单中的餐点、米面油其他、调料副食等不易坏的月初采购,蔬菜水果和肉按周采购,共分为两类。也就是表格中“”出库“”部分是依据,要生成汇总表里的“”入库“”部分,参照要求是表格中绿色部分,一个是日期,一个是分类。
“预算出库数据”是原数据表,“出入库合并”是要实现的表。

2、将“蔬菜水果和肉”的内容写在每周的周一,其他部分写在月初第一天即可。

3、中间空白不够自动补足空行。这个太复杂的话可以不做,到时候表格多留一些空行,如果有好方法,请老师们展示



下边是我写的:
Sub hebing()

    Range("B3:B18,D3:D18").Select
    ActiveWindow.SmallScroll Down:=45
    Range("B3:B18,D3:D18,B52:B91").Select
    Range("B52").Activate
    ActiveWindow.SmallScroll Down:=-33
    Range("B3:B18,D3:D18,B52:B91,D52:D91").Select
    Range("D52").Activate
    Selection.Copy
    Sheets("出库单").Select
    Range("D3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D181").Select
    Sheets("采购单").Select
    ActiveWindow.SmallScroll Down:=-33
    Range("B19:B51,D19:D51").Select
    Range("D51").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("出库单").Select
    Range("D180").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=30
End Sub
只能固定内容复制,还不如直接复制粘贴快了
请各位你老是指导一下



根据计划出库生成采购数据填入.rar

102.59 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-8 14:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-8 16:27 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-8 16:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-8 17:46 | 显示全部楼层
数据表设置有问题。需要重新调整。把你的主要想要达到的目的再说一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-8 17:58 | 显示全部楼层
洋务德雷 发表于 2023-4-8 17:46
数据表设置有问题。需要重新调整。把你的主要想要达到的目的再说一下。

就是把采购表中的内容,填写到出库单里面
要求:
1、把采购单的内容分开填写
2、出库单中的内容是分开的,每天中间有空行
3、要把采购单中的内容分别填写到不同日期当中
4、具体是蔬菜水果等易坏的分周采购,鉴于复杂,在我学习方法后可以再研究,如果老师能指导一下方法更是感激不尽
5、除了蔬菜水果和肉,其他的按月一次采购,直接填到月初。
6、具体难度在出库表中已经有了数据,不知道该怎么才能把这些按要求插进去
7、刚开始学,学过有usedrange判断最后一行,然后复制过去,但在这用不了,所以请老师给一下解决方案

TA的精华主题

TA的得分主题

发表于 2023-4-8 18:11 | 显示全部楼层
本帖最后由 盼哥 于 2023-4-8 19:58 编辑
  1. Option Explicit
  2. Option Base 1  '设置数组索引从1开始
  3.     '专业VBA开发,生产优质代码!

  4. Sub test()
  5.     Dim 规则1, 规则2, 位置1, 位置2
  6.    
  7.     '规则
  8.     规则1 = Array("餐点", "米面油其他", "调料副食")
  9.     规则2 = Array("蔬菜水果")
  10.    
  11.     位置1 = "2023-3-1"
  12.     位置2 = "2023-3-6"
  13.    
  14.     Dim tmpWorkbook As Workbook
  15.     ThisWorkbook.Sheets("采购单").Copy
  16.    
  17.     Set tmpWorkbook = ActiveWorkbook
  18.    
  19.     With tmpWorkbook.Sheets("采购单")
  20.         Dim cell As Range
  21.         Dim mergedCellRange As Range
  22.         Dim i As Integer
  23.         
  24.         For Each cell In ActiveSheet.UsedRange
  25.             
  26.             If cell.MergeCells Then
  27.                 Set mergedCellRange = cell.MergeArea
  28.                 With mergedCellRange
  29.                     '获取合并单元格的内容
  30.                     Dim cellText As String
  31.                     cellText = cell.Value
  32.                     
  33.                     '取消合并单元格
  34.                     mergedCellRange.UnMerge
  35.                     cell.Value = cellText
  36.                     
  37.                     '将单元格内容填充到所有拆分出的单元格中
  38.                     For i = 1 To .Cells.Count
  39.                         .Cells(i).Value = cellText
  40.                     Next
  41.                 End With
  42.             End If
  43.         Next
  44.         Dim arr
  45.         arr = .UsedRange
  46.         
  47.     End With
  48.     tmpWorkbook.Close False
  49.     Dim s$
  50.    
  51.    
  52.     For i = 1 To UBound(arr)
  53.         s = arr(i, 1)
  54.         If 条件成立(s, 规则1) Then
  55.             Call 写入(i, arr, 位置1)
  56.         Else
  57.             If 条件成立(s, 规则2) Then
  58.                 Call 写入(i, arr, 位置2)
  59.             End If
  60.         End If
  61.     Next
  62.    
  63. End Sub
  64. Sub 写入(i, arr, 位置)
  65.     Dim tRange As Range, r&
  66.     On Error Resume Next
  67.    
  68.    
  69.     With ThisWorkbook.Sheets("出库单")
  70.         Set tRange = .UsedRange.Columns("C").Find(位置)
  71.         If tRange Is Nothing Then
  72.             Exit Sub
  73.         End If
  74.         r = tRange.Row
  75.         .Rows(r).Insert Shift:=xlShiftDown
  76.         .Cells(r, "D") = arr(i, 2)
  77.         .Cells(r, "E") = arr(i, 4)
  78.         .Cells(r, "F") = arr(i, 5)
  79.         .Cells(r, "G") = arr(i, 6)
  80.         .Cells(r, "H") = arr(i, 3)
  81.         .Cells(r, "I") = arr(i, 1)
  82.         .Cells(r, "K") = "入库"
  83.     End With
  84.    
  85.     On Error GoTo 0
  86. End Sub
  87. Function 条件成立(s$, arr)
  88.     条件成立 = False
  89.     Dim i&
  90.     For i = 1 To UBound(arr)
  91.         If s = arr(i) Then
  92.             条件成立 = True
  93.             Exit For
  94.         End If
  95.         
  96.     Next
  97. End Function


  98. Sub mkOBJ(book As Workbook, x$)
  99.    
  100.     '根据字符串创建Book对象
  101.    
  102.     '判断文件已经打开
  103.     Dim eachBook
  104.     For Each eachBook In Workbooks
  105.         If InStr(eachBook.Name, x) > 0 Then
  106.             Set book = eachBook
  107.             Exit Sub
  108.         End If
  109.     Next
  110.    
  111.     Dim fName$
  112.    
  113.     fName = Dir(ThisWorkbook.Path & "" & "*" & x & "*")
  114.    
  115.     If fName = "" Then
  116.         MsgBox x & "不存在"
  117.         End
  118.     Else
  119.         
  120.         fName = ThisWorkbook.Path & "" & Left(x, InStrRev(x, "")) & fName
  121.         Set book = Workbooks.Open(fName)
  122.     End If
  123.    
  124. End Sub
复制代码

填入空白位置.zip

73.72 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2023-4-8 18:22 | 显示全部楼层
wuaijie 发表于 2023-4-8 17:58
就是把采购表中的内容,填写到出库单里面
要求:
1、把采购单的内容分开填写

我是说,你的数据表设置有问题,是数据结构不对。学习vba要从最根本的问题学起。就是数据结构。你这个应该是出入库的一种管理。
我在这方面的观点是SQL+vba。基础数据要合理设置,才能使用简洁的代码完成汇总。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-8 18:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
洋务德雷 发表于 2023-4-8 18:22
我是说,你的数据表设置有问题,是数据结构不对。学习vba要从最根本的问题学起。就是数据结构。你这个应 ...

那请老师给优化一下,该怎么做,数据表怎么做,请重编一下

TA的精华主题

TA的得分主题

发表于 2023-4-8 19:47 | 显示全部楼层
wuaijie 发表于 2023-4-8 17:58
就是把采购表中的内容,填写到出库单里面
要求:
1、把采购单的内容分开填写

我只能给你提下建议,因为你这个表没有填充标识,我感觉写不了代码:
1、可以在采购单中添加一列“类型”,可以分为“耐用品”、“易耗品”,我只是举例,就是这个意思吧;
2、然后把耐用品插入到最前面,易耗品插入到你希望的地方;
3、你说把易耗品插入到3-6日之间,这个我感觉不象是固定的吧?如果是固定的,代码也简单。但如果是要求按照每周的采购周期来插入,你又没说明白每个月4周是如何分开排列的,所以总体上你这个要求是很含糊的,我是没看懂;
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 16:20 , Processed in 0.042959 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表